魔術師見習いのノート

プロフィール

魔術師見習い
Author魔術師見習い-_-.
Twitter魔術師見習い

コンピュータ関係のメモを主に書きます.

MENU

Androidアプリ ウィジェットとイベント

投稿日:
修正日:
タグ:

目次

ウィジェット

ウィジェットとは,簡単にいえばGUIを構成する要素のことである.Androidでは,ホーム画面から直接操作をできるものをウィジェットと呼ぶが,ここでいうウィジェットはそのウィジェットとは別のものである.

ウィジェットの追加はレイアウトのエディット画面で行える.そして,ウィジェットのidやサイズなどの情報もまたそこで編集できる.

以前紹介したTest1プロジェクトのレイアウトにボタンを追加した画面は次の通りである.

id役割
textandroid.widget.TextView文字列を表示するウィジェット
buttonandroid.widget.Buttonただのボタンのウィジェット

イベント

次のソースコードは,ボタンをクリックしたら(押してそのまま離したら)表示されている文字列"Hello, World!"が"hoge"に変更されるプログラムのものである.

package com.example.test1;

public class MainActivity extends android.app.Activity {
        private android.widget.TextView txt;
        private android.widget.Button btn;

        class MyClickHandler implements android.view.View.OnClickListener{
		@Override
		public void onClick(android.view.View v){
	        	txt.setText("hoge");
		}
	}

        @Override
        protected void onCreate(android.os.Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
		
                MyClickHandler my_chandler = new MyClickHandler();
                txt = (android.widget.TextView)findViewById(R.id.text);
                btn = (android.widget.Button)findViewById(R.id.button);
		btn.setOnClickListener( my_chandler );
        }
}
ウィジェットはレイアウトで定義できる.そして,これをプログラムで利用するにはfindViewById()を使用する.ウィジェットの変数はR.idに属する.

ウィジェットが押されたり触られたりすることをイベントという.イベントに応じて何らかの処理を行うには,イベントリスナーと呼ばれるものをセットすれば良い.前述のサンプルでは,ボタンウィジェットにクリックリスナー(あるいはそれを継承したクラスのインスタンス)を対応付けている.

ウィジェットのプロパティやイベントに対応する関数をセットするには,setから始まる名前の関数を使用する.また,それを取得する関数の多くはgetから始まる名前の関数である.これらの関数の詳細については,公式のAndroid APIのリファレンスマニュアルやEclipseの補完機能の情報を参照されたい.

もう1つイベントハンドラをセットする例を紹介する.

        class SettingMenuItem implements android.view.MenuItem.OnMenuItemClickListener {
                @Override
                public boolean onMenuItemClick(android.view.MenuItem item)
                {
        		txt.setText("setting");
		}
        }

        @Override
        public boolean onCreateOptionsMenu(android.view.Menu menu) {
                getMenuInflater().inflate(R.menu.main, menu);
		android.view.MenuItem item = menu.getItem(0); // 1番目の項目
                SettingMenuItem setting = new SettingMenuItem();
                item.setOnMenuItemClickListener(setting);
                return true;
        }

values,drawable

前述のサンプルでは"hoge"という文字列リテラルを記述しているが,Androidアプリは多言語に対応するための仕組みがある.Androidでは数や文字列をres/values内のXMLファイルで定義することで,それを利用できる.そして,対応する言語に応じてvaluesファイルを使い分けることで,複数の言語に対応したプログラムになる.また,valuesで定義された数や文字列は,他のXMLファイルで使用することができる.これにより,コーディングと同じでファイルの修正が容易になる.

XMLファイルでvaluesの値を使用したい場合,次のようにして記述すれば良い.

android:label="@string/app_name"
また,プログラム内で利用したい場合,次のようにする.
android.content.res.Resources r = MainActivity.this.getResources();
String str = r.getString(R.string.hoge);
txt.setText(str);
文字列に限らず整数や小数,配列,画像(drawable)などについても基本的には同じ考え方である.

一覧