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 встроена в фоновое изображение:

enter image description here

Я тестировал его на 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-папок.