Я только что закончил свой виджет Android. Теперь у меня должны быть различные размеры этого виджета для пользователя для выбора из.
Например, мне нужен средний, маленький и большой виджет размера, поэтому когда пользователь устанавливает приложение, и держите главный экран, затем выбирают виджет, в меню виджета я хочу, чтобы он видел три виджета с тем же названием приложения, но с размером. Что-то вроде этого:
helloSmall helloMedium helloLarge
У меня есть средний готовый, но как я могу добавить маленькое и большое в том же приложении? При знании, что все три размера содержат те же точные данные и действия, просто размер и фон отличаются.
Вам нужно определение приемника для каждого типа в вашем файле манифеста, например:
<receiver android:name=".MyWidget" android:label="@string/medium_widget_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/medium_widget_provider" />
</receiver>
<receiver android:name=".MyWidget" android:label="@string/large_widget_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/large_widget_provider" />
</receiver>
Это позволит вам использовать один и тот же класс AppWidgetProvider
для нескольких виджетов с разными именами виджетов и разными размерами, определенными в
XML.
Теперь, если вам нужно больше различий в ваших виджетах, чем в
XML, я бы создал базовый класс виджетов, который реализует все общие черты поведения между разными типами:
public abstract class MyBaseWidget extends AppWidgetProvider
И тогда каждая из ваших конкретных реализаций может расширять MyBaseWidget. Затем в вашем файле манифеста у вас будет определение получателя для каждой из ваших конкретных реализаций, например:
<receiver android:name=".MyMediumWidget" android:label="@string/medium_widget_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/medium_widget_provider" />
</receiver>
<receiver android:name=".MyLargeWidget" android:label="@string/large_widget_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/large_widget_provider" />
</receiver>
Итак, в основном вам понадобится:
файл макета для каждого виджета. например: main_small.xml, main_medium.xml ...
в каталоге xml добавьте провайдера для каждого виджета. например: small_provider.xml, medium_provider.xml ... и так далее (обратите внимание, если у вас нет каталога xml, добавьте его в каталог drawable).
теперь что!
определите приемник в манифесте для каждого виджета. (как в примере в основном ответе)
вы можете использовать один и тот же макет или разные макеты. в принципе, это зависит от вас.
в вашем провайдере должно быть что-то вроде этого:
убедитесь, что для каждого провайдера указан целевой файл макета, который вы хотите использовать. в этом коде я запрашиваю файл main.xml в каталоге макета. для моего среднего виджета, например, у меня будет другой провайдер с таким же точным кодом, но я изменю последнюю строку
> android:initialLayout="@layout/medium".
надеюсь, это поможет, если нет, дайте мне знать, и я могу загрузить рабочий пример на моем сайте, и вы сможете взглянуть на него поближе. пожалуйста, дайте мне знать, как это происходит.
Желаю удачи.