android wear watch: используйте setPeekOpacityMode() для непрозрачности, используйте setCardPeekMode для высоты
Страница разработчика Android содержит следующую информацию о параметре переменной для карточек:
Когда выбран этот режим просмотра, карты просмотра будут иметь необходимую высоту при сохранении достаточного пространства в верхней части для отображения значков системного времени и состояния.
Как определить, сколько на ней карты?
Я спрашиваю, потому что мои карты, кажется, отображаются как короткие, но лицо подстраивается под размер карт, и две карты с подкладкой желательны.
РЕДАКТИРОВАТЬ: я не получил поведение, которое я искал, потому что я использовал неправильный метод для изменения настроек. Так как вызываемые целые числа имели значения для функции, программа работала.
.setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
.setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT
PEEK_OPACITY_MODE_TRANSLUCENT - это то же значение (1), что и PEEK_MODE_SHORT, поэтому вторая строка больше первой.
Правильный код:
.setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
.setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT)
2 ответа
Обязательно используйте.setCardPeekMode() для высоты карты и.setPeekOpacityMode() для прозрачности.
Поскольку для высоты и непрозрачности вызываются одни и те же целочисленные значения, можно использовать WatchFaceStyle.PEEK_OPACITY_MODE_OPAQUE в setCardPeekMood и WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT в setPeekOpacityMode(). Это может вызвать нежелательные эффекты.
Карта может занимать значительную часть экрана, в зависимости от стиля пользовательского интерфейса системы. Ваш циферблат должен приспосабливаться к этим ситуациям, гарантируя, что пользователи по-прежнему могут сообщать время, пока имеется карточка с уведомлением.
Чтобы определить свободное пространство над картой, чтобы вы могли адаптировать циферблат, используйте WatchFaceService.Engine.getPeekCardPosition()
метод.
Наблюдательные лица не должны мешать системным элементам пользовательского интерфейса, как описано в разделе "Размещение элементов системного интерфейса". Если ваш циферблат имеет светлый фон или показывает информацию в нижней части экрана, вам, возможно, придется настроить размер карточек уведомлений или включить защиту фона.
@Override
public void onCreate(SurfaceHolder holder) {
super.onCreate(holder);
// configure the system UI
setWatchFaceStyle(new WatchFaceStyle.Builder(AnalogWatchFaceService.this)
.setCardPeekMode(WatchFaceStyle.PEEK_MODE_SHORT)
.setBackgroundVisibility(WatchFaceStyle
.BACKGROUND_VISIBILITY_INTERRUPTIVE)
.setShowSystemUiTime(false)
.build());
...
}
Приведенный выше фрагмент кода конфигурирует подсматриваемые карточки высотой в одну строку, фон подсматриваемой карточки показывается только кратко и только для прерывистых уведомлений, а системное время не показывается.
Обновить
Или вы можете использовать relative measurements
Мы все знаем, что устройства имеют разные размеры и разрешения.
Необходимо получить ширину и высоту с помощью методов Canvas.getWidth() и Canvas.getHeight() и установить положение графических элементов, используя значения, которые являются долями обнаруженного размера экрана. Если вы изменяете размеры элементов циферблата в ответ на заглядывающую карту, используйте значения, составляющие некоторую долю оставшегося пространства над картой, чтобы перерисовать циферблат.