Решил продолжить тему разработки под android. Так как давно не писал, то немножко подзабыл и начинаю с разминки.
На этот раз напишем виджет обычных часов.
И так начнем. Открываем Eclipse -> New -> Android Project:
Project Name: AnalogClock
Build Target: Android 2.1
Application Name: AnalogClock
Package Name: my.azusdex.analogclock
Все данные можете поменять на свои, я так назвал для удобства. Дальше нужен фон для виджета, я использовал прозрачный фон созданный в GIMP. Имя фона bg1.png и сохранен в папке проекта drawable-hdpi. Я не думаю что у вас должны возникнуть проблемы с созданием фона, на всякий случай будет в низу. После этого открываем main.xml (в папке layout кто не помнит :-)) и вносим изменения
<RelativeLayout> ... </RelativeLayout> - позволяет нам создавать объекты на фоне и привязывать к главным объектам дополнительные, в нашем случае мы создали объект часы который нужно установить в центре фона. Если бы мы создали бы еще один объект его размещение на фоне зависело бы от наших часов, то есть находился бы ближе к ним в зависимости от свободного места.
Следущие две строки, размер виджета, в данном случае не растягивем его на весь экран. Следущая строка, загрузка фона, и последние две размещение на экране.
<AnalogClock /> - собственно сами часы. Использована встроеный class AnalogClock. Тоже не чего сложного, первая сторока имя переменной, последущие две размер часов на фоне, и устанавливаем строго по середине.
Далее переходим в AndroidManifest.xml и меняем так как здесь:
На этот раз напишем виджет обычных часов.
И так начнем. Открываем Eclipse -> New -> Android Project:
Project Name: AnalogClock
Build Target: Android 2.1
Application Name: AnalogClock
Package Name: my.azusdex.analogclock
Все данные можете поменять на свои, я так назвал для удобства. Дальше нужен фон для виджета, я использовал прозрачный фон созданный в GIMP. Имя фона bg1.png и сохранен в папке проекта drawable-hdpi. Я не думаю что у вас должны возникнуть проблемы с созданием фона, на всякий случай будет в низу. После этого открываем main.xml (в папке layout кто не помнит :-)) и вносим изменения
<?xml version="1.0" encoding="utf-8"?>Ок, давайте разберемся что мы тут наделали.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg1"
android:orientation="vertical"
android:layout_gravity="center" >
<AnalogClock
android:id="@+id/analog"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
<RelativeLayout> ... </RelativeLayout> - позволяет нам создавать объекты на фоне и привязывать к главным объектам дополнительные, в нашем случае мы создали объект часы который нужно установить в центре фона. Если бы мы создали бы еще один объект его размещение на фоне зависело бы от наших часов, то есть находился бы ближе к ним в зависимости от свободного места.
Следущие две строки, размер виджета, в данном случае не растягивем его на весь экран. Следущая строка, загрузка фона, и последние две размещение на экране.
<AnalogClock /> - собственно сами часы. Использована встроеный class AnalogClock. Тоже не чего сложного, первая сторока имя переменной, последущие две размер часов на фоне, и устанавливаем строго по середине.
Далее переходим в AndroidManifest.xml и меняем так как здесь:
<?xml version="1.0" encoding="utf-8"?>нужно для отображение виджета. Нужно также создать фаил hello_widget_provider.xml в папке xml, которую так же нужно создать (res). В этом файле мы прописываем минимальную высоту и ширину виджета
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.azusdex.analogclock"
android:versionCode="1"
android:versionName="1.0" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver
android:name=".AnalogClock"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter><meta-dataandroid:name="android.appwidget.provider"
android:resource="@xml/hello_widget_provider"/>
</receiver></application><uses-sdk android:minSdkVersion="7" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>И последнее, создаем класс AnalogClock.java унаследованый от AppWidgetProvider, оставляем его пустым.
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="100dip"
android:minHeight="100dip"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/main"
/>
package my.azusdex.analogclock;Вот в принцепе и всё!!!
import android.appwidget.AppWidgetProvider;
public final class AnalogClock extends AppWidgetProvider {
}
Ссылки на фон и саму апликацию:
Прикольно :-)
ОтветитьУдалитьЯ не пойму как создать "класс AnalogClock.java унаследованый от AppWidgetProvider" пишет ошибку когда задаю Source folder - Type name is empty. Пробовал имя менять пишет - Folder 'AnalogClockk' does not exist. Пробовал создавать папку с таким же именем. Не помогает. Что делать?
ОтветитьУдалитьещё у меня в main.xml вот такая ошибка - error: No resource identifier found for attribute 'layout_analogParentTop' in package 'android'
ОтветитьУдалитьЭто в пункте - element in the manifest: merge these together
Это в
Так же ошибка в hello_widget_provide - error: Error parsing XML: unbound prefix
это в <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
Ну и в AnalogClock.java(предлагает варианты) - Move 'AnalogClock.java' to package 'my.azusdex.analogclock'
или - Remove package declaration 'package 'my.azusdex.analogclock'
Что мне делать?)
В main.xml, в Manifest, в hello_widget_provider.xml исправил ошибки)А вот в AnalogClock.java так и не разобрался... я думаю может что то не правильно сделал при его создании..
ОтветитьУдалить