Получение размеров размеров appwidget (или обойти его)

Я создал хороший виджет для своего приложения. Он просто отображает список элементов, загруженных с сервера. Ну, если быть точным, это выглядит только как список, поскольку ListView в RemoteViews не поддерживается в старых версиях Android (которые я хочу поддержать).

Я хочу, чтобы мой виджет показывал список обновленных элементов, и я хочу, чтобы эти элементы занимали все доступные пространства виджетов. Чтобы лучше показать мою проблему, не предполагайте WLOG, что я хочу виджет с телевизионным расписанием выбранной программы. Знаю это:

  • Скачивание с сервера дорого
  • WLOG мы можем предположить, что на сервере есть нулевые элементы Aleph, которые я могу загрузить
  • Расписание ТВ может измениться, поэтому мы не хотим загружать расписание на целый месяц, но не более половины дня
  • Первый отображаемый элемент будет содержать показ, который в настоящее время транслируется

Как я могу убедиться, что в нижней части виджета не будет пустого пространства, если пользователь изменит его размер, чтобы увеличить его? Я искал SO, и кажется, что когда пользователь изменит размер виджета (на ICS или пользовательском пусковом устройстве – GO Launcher EX позволяет это), это будет невозможно (исправьте меня, если я ошибаюсь), чтобы получить новые размеры виджета.

Но они мне действительно не нужны! Я хотел бы знать, сколько элементов будет вписываться в виджет, и вычисление этого из размера виджета является всего лишь одним из методов.

Итак, я спрашиваю вас, можно ли, например, получить уведомление, если удаленное представление станет видимым или создать пользовательское представление для использования в RemoteViews, которое каким-то образом позволит мне оценить количество видимых элементов.

Если это будет невозможно, мне просто нужно будет использовать некоторые разумные значения по умолчанию, но было бы неплохо узнать, сколько строк я могу показать.

Начиная с Android 4.1 (уровень API 16) вы можете обнаружить изменения размера с помощью onAppWidgetOptionsChanged . Взгляните на этот ответ на простой пример. С этим обратным вызовом, по крайней мере, вы можете отслеживать диапазоны размеров виджета (жаль, что вы не можете отслеживать фактические размеры виджета). С предыдущими версиями и пользовательскими пусковыми установками вам не повезло: AFAIK не существует обобщенного способа получения фактических диапазонов размеров виджета, тем более, фактического размера.

То, что я делал бы в вашем случае, – это заполнить виджет рядом видов, которые соответствуют размеру виджета по умолчанию, как это определено в поставщике appwidget. Таким образом, вы избегаете пустого пространства внизу, если, конечно, на самом деле не так много предметов, чтобы показать. Когда виджет будет изменен, вы можете показать больше просмотров, используя onAppWidgetOptionsChanged с уровнем API 16 +, а с уровнем API <16 AFAIK вы получите пустое пространство, но в этом случае вы можете вскоре запустить обновление виджета, чтобы свести к минимуму эту проблему.