воскресенье, 3 октября 2010 г.

Создание виджетов. Часть 1.

Для начала создадим простой виджет изображенный на рисунке:



В Эклипсе создайте новый проект для Андроида:
File > new Project … > other … и выберите  'Android Project'

Назовите проект “Hello Widget” и выбирете в качестве платформы ‘Android 1.5’.
Снимите галку с чекбокса создания активити( “Create Activity”). Она просто не нужна для данного примера. Эклипс и плагин андроида создадут проект с стандартным содержимым( иконка приложения и т.п.). 


Теперь необходимо разметить layout для виджета рабочего стола откройте main.xml и модифицируйте его так:

 

 

 

Такая разметка представляет собой простой линейный слой(linear layout) с вьевером TextView для отображения нашего сообщения на рабочем столе. На этом шаге получиться ошибка:
Error: No resource found that matches the given name (at 'background'
with value '@drawable/widget_bg_normal')

Из-за того что нет файла в ресурсах с именем widget_bg_normal, поэтому положите файл с именем widget_bg_normal.9.png в директорию res/drawable . Для этого примера можно использовать картинку из примера SimpleWiktionary . Это картинка в формате png с NinePatch(патч растягивает её до нужных размеров), для фона виджета.
Так же необходимо добавить строку @string/widget_text в ресурсы. Для этого откройте res/values/string.xml и добавте следующую строку:
Hello Widget! 
Сам файл string.xml будет выглядеть так:
 
 
Hello Widget! 
Hello Widget 
 
На этом дизайн виджета закончен.

Теперь необходимо сообщить ОС о этом виджете, для этого откройте файл манифеста проекта AndroidManifest.xml.

Приведите его к такому виду(данные манипуляции можно совершить и через GUI плагина Андроида):
 
 
 
 
 
 
 
 
 
 
 
 
 
Теперь необходимо объявить Broadcast Receiver для “HelloWidget”.
Не забудьте точку перед HelloWidget, она создает полный правильный пусть объявленного пакета до указанного файл. Надпись HelloWidget  для виджета в файле string.xml уже вставил плагин Андроида, когда мы создавали сам проект.

Из документации:
элемент должен включать элемент
с атрибутом android:name. Этот атрибут специфичен для класса AppWidgetProvider, и есть  зарезервированные значения, например,  ACTION_APPWIDGET_UPDATE для broadcast, который должен быть объявлен. AppWidgetManager автоматически посылает всем виджетам на столах broadcasts с помощью AppWidgetProvider при необходимости.
Мета-тег говорит android о провайдере виджета. В данном примере, провайдер виджета находиться в res/xml/hello_widget_provider.xml. Его содержимое такое:
 
 
Он содержит размеры вашего виджета. updatePerdiodMillis – время в миллисекундах для обновления виджета. В данном примере оно не важно потому что нет необходимости обновлять виджет.

Главная разметка виджета находиться в файле main.xml. Он уже размечен.

Для работы виджета не хватает только одной вещи,- класса виджета, который расширяет AppWidgetProvider,  и который был объявлен в манифесте проекта AndroidManifest.xml в теге receiver-tag.
Создайте новый класс в проекте, назовите его HelloWidget и установите AppWidgetProvider  как супер класс.


 
Новый класс будет выглядеть так:
import android.appwidget.AppWidgetProvider;
public class HelloWidget extends AppWidgetProvider {
}

Так как виджет ничего не делает кроме отображения надписи,  его можно уже запустить.
Нажмите:
project > Run As > Android Application




Это действие запустит Android Virtual Device (AVD) и установит виджет на устройство.



Теперь нажмите и удерживайте левую кнопку мыши на рабочем столе(речь идет о эмуляторе, а не реальном устройстве) пока не появиться всплывающее меню с действиями, Выберете виджеты и добавьте Hello Widget …
… и получите результат:
 
 

Комментариев нет:

Отправить комментарий