レポート書く暇もなんかめんどくさいので
このblogをさらすことにしましたよ。ふふ。
そんな前書きはともかく今日は「Widget」について。
Widget は 「ウィジェット」と読みます。下噛む。
ウィジェットを作ってみようと思います。
最初なのでなにも起こらないウィジェットを作ります。
1.ウィジェットのレイアウトXMLを作る。
ウィジェットのデザインを考えてまずは見た目から入ります。
「drawable」 直下に適当な画像を置き、
「layout」直下に適当なレイアウトwigetLayoutのXMLファイルを作ります。
見本。
appwidget.xml
- <!--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">
- <imageview android:id="@+id/imageView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/buttons">
- </imageview>
- </linearlayout>
長いですが、ただdrawableの中にあるbuttonsっていう画像を表示させているだけです。
で、次にいきます。
2.widgetのXMLを定義する
WidgetProviderを使うのでXMLを定義します。
何を書くのかというと「こんなデザインで○分ごとに更新されます」というようなことです。
見本。
appwidget.xml(めんどくさいのでファイル名は一緒)
- <!--xml version="1.0" encoding="utf-8"?-->
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initiallayout="@layout/appwidget" android:minheight="72dip" android:minwidth="72dip" android:updateperiodmillis="0">
- </appwidget-provider>
これは1で作ったレイアウトXMLを使用しています。
注目はここ。
- android:updatePeriodMillis="0"
これは更新感覚です。Millisっていうことなので秒数を表しています。
今回は更新もしないウィジェットなので0で。
3.AppWidgetProvider を実装する
続いてはjavaです。コードに入っていきます。
今回はなにもしないウィジェットなのでこんな感じで。
見本。
appwidget.java(めんどくさいのでファイル名は一緒)
- import android.appwidget.AppWidgetManager;
- import android.appwidget.AppWidgetProvider;
- import android.content.Context;
- import android.content.Intent;
- public class appwidget extends AppWidgetProvider {
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
- super.onUpdate(context, appWidgetManager, appWidgetIds);
- }
- @Override
- public void onEnabled(Context context) {
- super.onEnabled(context);
- }
- @Override
- public void onDeleted(Context context, int[] appWidgetIds) {
- super.onDeleted(context, appWidgetIds);
- }
- @Override
- public void onDisabled(Context context) {
- super.onDisabled(context);
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- super.onReceive(context, intent);
- }
- }
単純にAppWidgetProviderを継承して親メソッドを呼んでいるだけです。
本当に、なにもしません。
4.最後にAndroidmManifest.xmlに追記する
最後はAndroidManifest.xmlに追記します。ウィジェットなのでAcitityではないので注意。
画面に張り付いてじーっとまっているという感じなので
処理を受け取るReceiverを使います。
見本。
AndroidManifest.xml
- <!--xml version="1.0" encoding="utf-8"?-->
- <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.co.mogakana.wiget.test" android:versioncode="1" android:versionname="1.0">
- <uses-sdk android:minsdkversion="8">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <receiver android:name=".appwidget">
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
- </intent-filter>
- <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget"></meta-data>
- </receiver>
- </application>
- </uses-sdk></manifest>
作成のポイントとして。
まずはmeta-dateでwidgetを使うよ、と定義します。
- <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget"></meta-data>
そして次にIntent-filterで先ほどmeta-detaで定義した名前を使用して受け取る準備をします。
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
- </intent-filter>
今回は単純なものなので更新時を受け取ります。
が、更新しないウィジェットなので意味はないですが、入れておかないと使えないので・・・。
で、実行してウィジェットを貼るとこんな画面になります。
小さい!!(笑)
これは単純に解像度(図のファイルは横3縦1なのに、レイアウトファイルでは横1縦1にしている)の問題なのですが・・・
長くなるのでまた今度。
0 件のコメント:
コメントを投稿