Несколько размеров виджетов - PullRequest
3 голосов
/ 24 января 2012

Я искал в интернете, но ничего не помогает.Я хочу сделать второй виджет, только больше.Я использую сервис для обновления своего виджета, поэтому мне нужно создать 2 сервиса (обновить данные в виджете с помощью удаленных просмотров и т. Д.) Или я могу сделать это проще?

Когда я добавляю средний виджет, он отображается маленьким, но занимает больше места (144dp x 72dp) и обновления не происходит.Может быть, я должен скопировать целые классы приложения и изменить его, но я думаю, что это глупое решение.

Я пробовал это решение

как добавить несколько виджетов в одном приложении?

Как разместить несколько размеров виджетов в одном apk?

Есть подсказки?:)

1 Ответ

9 голосов
/ 29 марта 2012

У меня была такая же потребность с моим виджетом.Именно эти две ссылки, которые вы опубликовали, помогли мне найти решение, которое, наконец, потребовало немного больше исследований.

Чтобы получить второй размер для вашего виджета:

  1. Определите другого получателя в вашем манифесте с другим именем.Это важно: если вы не используете другое имя, только одно будет отображаться в списке доступных виджетов.Например: android:name=".MyWidget_Small" и android:name=".MyWidget_Medium".Также измените метки соответственно

  2. Дополнительному получателю нужен новый поставщик appwidget в res / xml.В android: ресурс метаданных тега введите имя другого XML-файла.Тогда у вас будет android:resource="@xml/MyWidgetProvider_Small" и android:resource="@xml/MyWidgetProvider_Medium"

  3. Каждый XML-файл в res / xml должен указывать на отдельный макет.У вас будет android:initialLayout="@layout/MyWidget_Small" и android:initialLayout="@layout/MyWidget_Medium"

  4. Теперь часть Java.Каждому провайдеру appwidget необходим соответствующий класс Java, который расширяет AppWidgetProvider, поэтому вам понадобятся два дополнительных класса.Если ваш первоначальный класс был MyWidget.java, вы добавите MyWidgetSmall.java и MyWidgetMedium.java.Вы, вероятно, в конечном итоге создадите подклассы своего исходного Java-класса и, возможно, измените каждый новый класс, если виджет будет иметь различное поведение в каждом размере.Не забудьте назвать два класса, как вы делали в шаге 1 на андроиде получателя: name

  5. Ваша служба не нуждается в дублировании.Однако вы должны изучить свой исходный код, чтобы найти вхождения явных ссылок на MyWidget.class.Если вы сделали это, вы должны ссылаться на фактический подкласс

Надеюсь, это поможет

...