К основному контенту

Основа создания виджета для Android

Этой статьей я бы хотел обозначить новое направление в блоге - Разработка под Android. Все основы буду считать пройденными, так что, если Вы новичок, то следует начать с чего-то более простого, например с простого приложения "Hello World".
Итак, о виджетах! Скажу сразу - я не готов, не хочу и не вижу смысла отказываться от "благ цивилизации". Я не буду писать структуры папок и файлов. Не буду приводить примеры обязательных файлов для приложения под 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";
 
}
 
Важные моменты:

  1. Нужно импортировать определение класса android.appwidget.AppWidgetProvider
  2. Унаследовать класс от 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.

Комментарии

Популярные сообщения из этого блога

Прямые ссылки на файлы Google диска

В предыдущей статье я рассказал, как подключить свой JavaScript файл к блогу BLOGSPOT . Но для того, что бы их подключить нужны прямые ссылки на файл, а Google диск при предоставлении общего доступа к файлу выдает ссылку на предварительный просмотр, которая никак напрямую не ссылается на файл. Для Google диска прямая ссылка на файл - это ссылка на скачивание. Ниже описаны два способа создания ссылки на скачивание на примере файла prism.js.

События для ведения таблиц

Как и всегда, в пылу проекта внезапно родилась Z табличка. Главный нюанс был в том, что она должна была хранить пароли для авторизации на стороннем сервере. Естественно, никто не хотел хранить пароли в открытом виде, а двустороннее шифрование SAP не умеет без сторонних пакетов и надстроек. Далее, все как обычно - придумали алгоритм, сделали табличку. Дело осталось за малым - нужно шифровать пароли, которые вводит пользователь. Делать отдельную программу нет смысла, поскольку ее функционал мало чем будет отличаться от сгенерированного. Вот здесь на помощь приходят события! С их помощью можно, наверное, все. По крайней мере, я не нашел чего-либо, что нельзя сделать с данными через события.

OOP ALV GRID с HTML шапкой

В этой статье хочу постараться подробно описать и привести пример, как можно создать ALV отчет с таблицей на весь экран и с HTML шапкой вверху. Я не буду описывать начальный этап, где пишется селекционный экран или делается выборка данных. Будем считать, что основа у нас есть и нам нужно просто вывести данные. Главной изюминкой является то, что нужно вывести ALV GRID на экран без использования каких-либо дополнительных элементов на экране. Step-By-Step Шаг 1. Создание окна Создаем самое простое окно с номером 100. На него не нужно кидать никаких контейнеров. Оно нам нужно только для модулей PAI и PBO и вывода на него ALV GRID.