5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。 5.基本API 5-1 レイアウト ①Line Layout(Vertical) ②Line Layout(Horizontal) ③Relative Layout ④Frame Layout ⑤Include Other Layout ⑥Fragment ⑦Table Layout ⑧Table Row なお、Absolute Layoutは プログラムで指定
パレットのそれぞれをドラッグ (Absoluteを除く) (1)主なレイアウト指定 Line Layout(Vertical) Line Layout(Horizontal) Relative Layout 9:00 9:00 9:00 (0) (1) (2) (0) (0) (1) 0の下 (2) 1の右 (1) (3) 2の下 (2) (3) Frame Layout Table Layout Absolute Layout 9:00 9:00 9:00 ヘッダ (0, 0) (1, 0) (2, 0) 40 (0, 1 (1, 1) (2, 1) (20, 40) 120 (0, 2) (1, 2) (2, 2) (0,3) (1, 3) (2, 3) (20, 120) フッタ 20
(2)簡単な例(4.2節の例に新しいボタンウィジェットを追加) A. Linear Layout(Horizontal)の配置 ①ここで左ボタンを 押して クリックしたまま ②左ボタンを離すと 青い枠線が表示される。 (ドラッギングしているところ)
B. ウィジェットの移動 ①移動したいウィジェットをLinear Layout(Horizontal)の青色枠線内にドラッギング。 ②左ボタンを離すと青い枠線内にウィジェットが移動している。 ①移動したいウィジェット を選んで押したまま ②左ボタンを離すと 青い枠線が表示される。 (ドラッギングしているところ)
C. 新しいボタンウィジェットを配置 ①移動したいウィジェットをLinear Layout(Horizontal)の青色枠線内にドラッギング。 ②配置が終わったら、右ボタンをクリックしてポップアップメニューから、「表示」「プロパティ」を選択してプロパティリストを表示しておく。 ②左ボタンを離すと 青い枠線が表示される。 ①配置したいウィジェットを ドラッギング
D. 「On Click」プロパティにイベントハンドラの関数名を入力 (最初のボタンのイベントハンドラと異なる関数名にする) ①イベントハンドラの関数名入力
E. ソースプログラムの入力 package jp.Eclipse; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Gravity; import android.widget.TextView; import android.widget.Toast; public class Test01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void onAction(View view){ TextView text1=(TextView)this.findViewById(R.id.text1); text1.setText("OK!"); public void onAction2(View view){ Toast myToast=Toast.makeText(this,“トーストで表示”, Toast.LENGTH_LONG); myToast.setGravity(Gravity.CENTER,0,0); myToast.show();
F. 実行(2.4参照) 左のボタンをクリックしたときと、右のボタンをクリックしたときの 動きが異なることに注意。
(3)動的なレイアウト A. プログラム例(必ずしもXMLは必要ない) package jp.eclips; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.*; public class NonXMLActivity extends Activity { private TextView text1; private EditText edit1; private Button button1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Activity activity = this; // ListView の生成と配置 LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); this.setContentView(layout); // TextView の生成と配置 text1 = new TextView(this); text1.setText("動的ウィジェットの配置"); text1.setTextSize(20); layout.addView(text1); // EditText の生成と配置 edit1 = new EditText(this); edit1.setTextSize(20); layout.addView(edit1); // Button の生成と配置 button1 = new Button(this); button1.setText("ここをクリック"); layout.addView(button1); // ボタンのイベント処理 button1.setOnClickListener (new View.OnClickListener() { public void onClick(View v) { Toast toast=Toast.makeText(activity, “入力文字列 : ” + edit1.getText(), Toast.LENGTH_LONG); toast.show(); } });
B. 実行例 実行しているところ
C. レイアウトファイルが用意されている理由 ①画面デザインをやりやすくするため。 ②レイアウトを修正するのにプログラムを修正する必要がない。 ③通常は、画面デザインはデザイナーに、コードはプログラマにと作業分担することが多い。
(4)イベントリスナによるイベント処理 A. イベントリスナを使う ① 「On click」プロパティにメソッド名を設定する方法では、On Clickイベント以外が使えない。 ② 本来のJavaのイベント処理は、イベントリスナを定義して組み込むという方法(デリゲートイベントモデル)である。 ③ Androidの場合、クリック時のイベントハンドラは、Viewクラスの内部インターフェースとして組み込まれているので、以下をimportする。 android.view.View.OnClickListener ④ イベントハンドラのメソッドは以下のとおり。 public void onClick(View v){ /* クリックのとき実行する処理 */ } ⑤ 次のようにして組み込む [ウィジェット】.setOnClickListener(【View.OnClickListener】);
B. 組み込み例 (「On Click」プロパティは消去) package jp.eclipse; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class ListenerTestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Activity activity =this; Button button = (Button)this.findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast toast = Toast.makeText(activity,“リスナによる実行”, Toast.LENGTH_LONG); toast.show(); } }); } B. 組み込み例 (「On Click」プロパティは消去)
C. 実行例 Java 1.6で実行すること
(5)リスナクラスを実装する方法 A. 方法の手順 ① リスナクラスを「implements」で実装する。 ② そのリスナをボタンのリスナとして登録する。 Public void onCreate(・・・){ ・ 【ウィジェット】.setOnClickListener(new 【リスナクラス名】()); } class 【リスナクラス名】 implements OnClickListener{ public void onClick(View v){ /* クリックされたときの処理 */ リスナ登録 ボタンがクリックされたとき 呼び出されるメソッド リスナクラスの宣言
B. 組み込み例(その1) (例は動的配置とくみあわせている) package jp.eclipse; import android.app.Activity; import android.os.Bundle; import android.view.*; import android.view.View.OnClickListener; import android.widget.*; public class ImplementSampleActivity extends Activity { /** Called when the activity is first created. */ TextView textV; Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL=new LinearLayout(this); LL.setOrientation(LinearLayout.VERTICAL); setContentView(LL); textV=new TextView(this); textV.setText("いらっしゃいませ!こんにちは"); button=new Button(this); button.setText("注文"); LL.addView(textV); LL.addView(button); button.setOnClickListener(new buttonClickListener()); } B. 組み込み例(その1) (例は動的配置とくみあわせている)
組み込み例(その2) (例は動的配置とくみあわせている) class buttonClickListener implements OnClickListener{ public void onClick(View v){ textV.setText("ご注文ありがとうございます。"); }
C. 実行例 Java 1.6で実行すること