3

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

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

Я пытался это решение

how to add multiple widgets in one app?

How to put multiple widget sizes in one apk?

Любые намеки? :)

+0

вот мое понимание вашего вопроса. Итак, у вас есть 2 проблемы, и они: ** 1. ** у вас есть 2 виджета, и вы хотите, чтобы второй стал больше ** 2. ** у вас есть проблемы с обновлением данных в виджетах. эти проблемы? – lynnyilu

+1

Да :) Правильно –

ответ

9

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

Для того, чтобы иметь второй размер для виджета:

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

  2. Дополнительный приемник нуждается в новом поставщике приложений в 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 в андроиде получателей: имя

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

Надеются, что это помогает

+0

Это действительно хороший комментарий о разных именах для приемников. Я потратил час, пока не осознал это, и нашел решение в качестве доказательства. – Mikhail

+0

good .. + 1. Возможно показать новый макет в том же виджетах на виджетах щелчок ... тот же, что и плавный календарь .. – Ranjit

+0

@RanjitPati можно, примите во внимание, что вам нужно перестроить весь макет каждый время, когда вы вносите изменения в свою «структуру».Если вы не говорите об одном из таких псевдо-приложений, таких как те, что находятся в панели запуска Samsung или Go Launcher –

Смежные вопросы