Этой статьей я бы хотел обозначить новое направление в блоге - Разработка под Android. Все основы буду считать пройденными, так что, если Вы новичок, то следует начать с чего-то более простого, например с простого приложения "Hello World".
Итак, о виджетах! Скажу сразу - я не готов, не хочу и не вижу смысла отказываться от "благ цивилизации". Я не буду писать структуры папок и файлов. Не буду приводить примеры обязательных файлов для приложения под Android. Все это давно умеет делать Android Studio. Понимаю, многие любят Eclips, но на мой взгляд он себя изжил. Для начинания пойдет и он, но в деле важна скорость!
В этом файле находится описание нашего виджета: размер 40х40 (одна ячейка по сути), время обновления в миллисекундах и файл вывода.
Виджет почти готов!
Итак, о виджетах! Скажу сразу - я не готов, не хочу и не вижу смысла отказываться от "благ цивилизации". Я не буду писать структуры папок и файлов. Не буду приводить примеры обязательных файлов для приложения под Android. Все это давно умеет делать Android Studio. Понимаю, многие любят Eclips, но на мой взгляд он себя изжил. Для начинания пойдет и он, но в деле важна скорость!
Проект и описание виджета
Итак, создаем новый проект в Android Studio. Самый обычный с простыми Activity. Этого достаточно, что бы студия сама создала все структуры, нужные папки и Activity. После этого добавляем еще папку src/main/res/xml. Туда положим AppWidgetProviderInfo. Поскольку файл XML. то все должно быть понятно.<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp" android:minHeight="40dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/example_appwidget" > </appwidget-provider>
В этом файле находится описание нашего виджета: размер 40х40 (одна ячейка по сути), время обновления в миллисекундах и файл вывода.
Файл вывода
Это обычный XML макета вывода. В нем указывается расположение, элементы и т.п. Этот файл нужно создать в папке src/main/res/layout и дать ему имя, как указано в описывающем файле - example_appwidget. Код приведен ниже и я не буду заострять на нем внимание.<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#dd55ff" android:padding="0.1dp"> <TextView android:text="Widget" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.8" android:layout_gravity="center_vertical" android:textColor="#000000"> </TextView> <TextView android:text="Just text" android:id="@+id/widgetMood" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.3" android:layout_gravity="center_vertical" android:textColor="#000000"> </TextView> </LinearLayout>
Файл провайдера
Эта часть относится к Java коду. Для начала создадим файл (я назвал его ExampleAppWidgetProvider) в папке src/main/java. В этом файле будет содержаться основная логика виджета.
package ru.test.app; import android.appwidget.AppWidgetProvider; public class ExampleAppWidgetProvider extends AppWidgetProvider { public static final String WIDGETTAG = "MyTest"; }Важные моменты:
- Нужно импортировать определение класса android.appwidget.AppWidgetProvider
- Унаследовать класс от AppWidgetProvider
Виджет почти готов!
Манифест
Последний штрих - файл AndroidManifest.xml. В него нужно вписать несколько строк. что бы Android узнал про то, что у нас тут есть виджет.
Немного пояснений.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ru.test.app" > <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="ru.test.app.ExampleAppWidgetProvider" > <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/example_appwidget_info" /> </receiver> </application> </manifest>Я удалил все записи об Activity, поскольку в этом примере они не нужны. Но прелесть в том, что виджеты и приложение в Android можно поместить в один пакет.
Немного пояснений.
- ru.test.app.ExampleAppWidgetProvider - это путь в пакете к нашему классу виджета
- в теге meta-data говориться о том, что это виджет и его описание находится в xml/example_appwidget_info
Плюшка
Google рекомендует придерживаться формуле расчёта размера виджета (number of cells * 74) – 2.
Комментарии
Отправить комментарий