Appwidget расчет размера
Это может быть я, но когда я вычисляю минимальные размеры виджета приложения в соответствии с формулой, приведенной на странице android, я не получаю правильную ширину виджета; формула как следующее:
ширина (n) = (70 x n) - 30
когда я хочу иметь виджет 5x1, правильная ширина будет (5 * 70) - 30 = 320dp. Однако при тестировании этого на motorola Xoom он решает быть виджетом 4x1. Я тестировал разные значения, и 400dp кажется хорошим для 5x1 на motorola xoom с Honeycomb, но затем я бы протестировал его на обычной вкладке Galaxy с пряниками, а затем он разрешится до 6x1 (как и следовало ожидать).
Итак, два вопроса здесь;
- какую разницу между пряниками и сотами я упускаю из виду?
- поскольку я знаю, что размер виджета ICS больше не имеет заполнения между виджетами, есть ли здесь какое-то эмпирическое правило?
4 ответов
Не слишком много устройств полностью следовать рекомендуемой формуле Google. Вам лучше использовать несколько папок xml-xxx, которые могут указать более точную minWidth & minHeight, которые соответствуют различным экранам и ОС.
прямо сейчас я четыре исключительно на основе ОС:
xml // standard
xml-v11 // Honeycomb grid
xml-v14 // ICS's new extra padding
xml-sw552dp-v14 // ICS tablet padding
но поскольку я настраиваюсь, мне, возможно, придется добавить несколько новых папок для определенных dpis или экранов.
быстрое обновление:
только некоторые устройства используют автоматическое заполнение. Samsung & HTC имеют пользовательские UIs, которые используют виджеты полной ширины, поэтому они переопределяют заполнение ОС на своих пусковых установках.
в своем виджет 4x1, я использовал эти размеры для res / values / dimens.в XML:
<!-- size = (74 x n) - 2 -->
<dimen name="appwidget_margin">0dp</dimen>
<dimen name="appwidget_min_width">294dp</dimen>
<dimen name="appwidget_min_height">72dp</dimen>
и res / values-v14 / dimens.в XML:
<!-- size = (70 x n) - 30 -->
<dimen name="appwidget_margin">0dp</dimen>
<dimen name="appwidget_min_width">250dp</dimen>
<dimen name="appwidget_min_height">40dp</dimen>
Я виджет шаблоны pack для фоновых изображений .
на официальное руководство там написано, что маржа по умолчанию в res / values / dimens.xml должен быть 8dp, но если я использую 8dp, мой виджет меньше стандартных виджетов на рабочий стол (поиск google, погода и т. д.). Это потому, что маржа для v1-v13 встроена в фоновое изображение:
Я тестировал его на HTC Desire, Nexus S, эмуляторе Android 2.2 и эмуляторе Android 2.3.3. С шаблонами pack backgrounds и конфигурацией выше размер моего виджета такой же, как и у других стандартных виджетов, и хорошо выглядит на всех устройствах, которые я тестировал.
существует также проблема с различными пусковыми установками. Я рекомендую эту статью прочитать: http://radleymarx.com/blog/app-widget-padding-margins-in-ics-android/
в ICS нет никакой прокладки, есть автоматическая прокладка. И формула, которую вы использовали для ICS. Для более старых версий существует другая формула:
num*74 - 2
Примечание: Если вы нацелены на pre-Honeycomb (или не указываете targetSdkVersion при указании minSdkVersion до honeycomb), то вычисления honeycomb grid (и ICS grid) не вступают в силу. Недостатком этого является то, что вы пропустите новые функции ОС, но если вы на самом деле не нуждаетесь в них, то сохранение целевых pre-honeycomb сэкономит хлопоты настраиваемых XML-папок.