ラベル Widget の投稿を表示しています。 すべての投稿を表示
ラベル Widget の投稿を表示しています。 すべての投稿を表示

2011年6月1日水曜日

[Android]Widgetをエレガントにする

さて、昨日はWidget(ウィジェット)を配置してみました。
これですね。






















小さい!!(笑)
格好悪いので本来の形にもどしてみましょう。






















本来の形になりました。
ちなみにこれは
画像ファイルの大元をいじっているわけではなくて、dipをいじっているだけですが。
dipってなんぞ?
density-independent pixels の略です。直訳すると「密度に依存しないピクセル」なんだそうです。
このあたりの詳しいことは @yanzm さんという人が綺麗にまとめてくださっているのでどうぞ。

Y.A.M の 雑記帳
Android Dimension 単位

さて、dipの意味はわかりましたでしょうか?
続けます。

Androidの場合は1マスは縦横で74dipx74dipとなりますが、
実際に描画できる範囲は-2dipをひいたものになります。
すなわち、72dipx72dipということになりますね。

前回ではそれを踏まえたうえで xmlフォルダ内のappwidget.xmlの一部(縦横サイズ指定箇所)を

android:minHeight="72dip"
    android:minWidth="72dip"

としていました。
これだと1マス分しか指定していないので先ほどの不幸が訪れるわけです。
では、3マスにするにはどうすればいいのか?

先ほどの74dipという数字を使って算出します。
公式はこちら。

(74 * 描画マス分)- 2

今回は3マスなので

(74dip * 3マス) - 2dip = 220dip

となります。
縦は1マスなのでそのままを使用します。
というわけで

android:minHeight="72dip"
    android:minWidth="220dip"

とします。
これで実行すると























こんなようにいい感じになります。
さらにウィジェットにはサイズを指定することでもっとエレガントになる方法があるのですが、
やっぱり長くなるので気が向いたときに書きますな。

2011年5月31日火曜日

[Android] Widgetだけを作ってみる

どうでもいいですが、会社から「ちゃんと勉強しているのかい?」ときかれました。
レポート書く暇もなんかめんどくさいので
このblogをさらすことにしましたよ。ふふ。

そんな前書きはともかく今日は「Widget」について。
Widget は 「ウィジェット」と読みます。下噛む。

ウィジェットを作ってみようと思います。
最初なのでなにも起こらないウィジェットを作ります。

1.ウィジェットのレイアウトXMLを作る。
ウィジェットのデザインを考えてまずは見た目から入ります。
「drawable」 直下に適当な画像を置き、
「layout」直下に適当なレイアウトwigetLayoutのXMLファイルを作ります。

見本。
appwidget.xml



    
    


長いですが、ただdrawableの中にあるbuttonsっていう画像を表示させているだけです。

で、次にいきます。

2.widgetのXMLを定義する
WidgetProviderを使うのでXMLを定義します。
何を書くのかというと「こんなデザインで○分ごとに更新されます」というようなことです。

見本。
appwidget.xml(めんどくさいのでファイル名は一緒)





これは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


    

    
        
            
                
            
            
            
        

    


作成のポイントとして。
まずはmeta-dateでwidgetを使うよ、と定義します。

        


そして次にIntent-filterで先ほどmeta-detaで定義した名前を使用して受け取る準備をします。


                            


今回は単純なものなので更新時を受け取ります。
が、更新しないウィジェットなので意味はないですが、入れておかないと使えないので・・・。

で、実行してウィジェットを貼るとこんな画面になります。























小さい!!(笑)
これは単純に解像度(図のファイルは横3縦1なのに、レイアウトファイルでは横1縦1にしている)の問題なのですが・・・
長くなるのでまた今度。