libro
www.tuyano.com
Google androidプログラミング入門

オリジナル・ウィジェットを作ろう! (1/6)

作成:2009-12-28 17:04
更新:2010-05-11 14:38

■Viewクラスをレイアウトで使うには?

前回、グラフィックの描画をした際、Viewクラスを継承して描画用のクラスを作り、それを画面に表示して使いました。こんな具合に、Viewを継承して新しいクラスを作れば、独自の部品を作ることができます。

androidでは、このように部品として画面に配置して使えるものを「ウィジェット」といいます。Viewを継承してクラスを定義すれば、オリジナルのウィジェットを作ることができるのです。が、前回は、Activityクラスの中で、コードを書いてクラスのインスタンスを画面に設定していました。やはり、画面表示は、レイアウト用のXMLに書いて利用できるようにしたいものです。そこで、今回は「レイアウトのXMLファイルで使えるオリジナル・ウィジェット」を作ることにしましょう。

レイアウトのXML内で使えるウィジェットは、さまざまなウィジェットのクラスを継承して作ることができます。グラフィックを利用する場合には、前回のようにViewを継承して作るのが基本です。ただし、いくつかメソッドを追加しなければいけません。整理すると、下に掲載したリストのようになります。

ここでは、引数が2つあるコンストラクタと、「onMeasure」というメソッドが新たに追加されています。

「2つの引数を持つコンストラクタ」は重要です。これがないと、レイアウトのXMLに配置してもうまく動きません。第2引数にはAttributeSetインスタンスが渡されていますが、これに、XML内に記述するタグ内のさまざまな属性がまとめられています。ここから必要な属性を取り出して設定を行うわけです。

onMeasureは、ウィジェットを配置したりリサイズの要求があった場合などに、ウィジェットの大きさを正しく設定するための働きをします。このウィジェットが収められているコンテナから、ウィジェットをはめ込んだりしたときなどにサイズを設定するためのイベントが発生します。このとき、このonMeasureが呼び出されます。この際、幅と高さの制限となる値が引数で渡されます。onMeasureでは、それらをもとに表示すべき大きさを計算し、そして「setMeasuredDimension」というメソッドを呼び出して大きさを設定します。

とりあえず、これらのメソッドを実装すれば、レイアウト用XML内で使えるウィジェット・クラスができあがります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※ウィジェット・クラスの基本形

class クラス名 extends View {


    public コンストラクタ(Context context) {
        ……初期化処理……
    }


    public コンストラクタ(Context context, AttributeSet attr) {
        ……初期化処理……
    }


    public void onDraw(Canvas c) {
        ……描画処理……
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        ……サイズを計算する処理……
    }
}
※関連コンテンツ

「Google androidプログラミング入門」に戻る