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() и установить положение графических элементов, используя значения, которые являются долями обнаруженного размера экрана. Если вы изменяете размеры элементов циферблата в ответ на заглядывающую карту, используйте значения, составляющие некоторую долю оставшегося пространства над картой, чтобы перерисовать циферблат.

Другие вопросы по тегам