Android演習

ウィジェットの並べ方を指定するには、
パレットのレイアウト(Layoutでは以下
の8種類)を配置する。
①Line Layout(Vertical)
②Line Layout(Horizontal)
③Relative Layout
④Frame Layout
⑤Include Other Layout
⑥Fragment
⑦Table Layout
⑧Table Row
なお、Absolute Layoutは
プログラムで指定
5.基本API
5-1 レイアウト
パレットのそれぞれをドラッグ
(Absoluteを除く)
Line Layout(Vertical)
(1)主なレイアウト指定
Line Layout(Horizontal)
9:00
(0)
Relative Layout
9:00
(0)
(1)
9:00
(2)
(0)
(1) 0の下
(1)
(2) 1の右
(3) 2の下
(2)
(3)
9:00
ヘッダ
Absolute Layout
Table Layout
Frame Layout
9:00
(0, 0)
(1, 0)
(2, 0)
(0, 1
(1, 1)
(2, 1)
(0, 2)
(1, 2)
(2, 2)
(0,3)
(1, 3)
(2, 3)
9:00
40
(20, 40)
120
(20, 120)
フッタ
20
(2)簡単な例(4.2節の例に新しいボタンウィジェットを追加)
A. Linear Layout(Horizontal)の配置
①パレットの「レイアウト」「Linear Layout(Horizontal)」を、レイアウト内にドラッギングする。
②Linear Layout(Horizontal)の枠組みが青色線で表示される。
①ここで左ボタンを押して
クリックしたまま
②左ボタンを離すと
青い枠線が表示される。
(ドラッギングしているところ)
B. ウィジェットの移動
①移動したいウィジェットをLinear Layout(Horizontal)の青色枠線内にドラッギング。
②左ボタンを離すと青い枠線内にウィジェットが移動している。
①移動したいウィジェット
を選んで押したまま
②左ボタンを離すと
青い枠線が表示される。
(ドラッギングしているところ)
C. 新しいボタンウィジェットを配置
①移動したいウィジェットをLinear Layout(Horizontal)の青色枠線内にドラッギング。
②配置が終わったら、右ボタンをクリックしてポップアップメニューから、「表示」「プロパ
ティ」を選択してプロパティリストを表示しておく。
①配置したいウィジェットを
ドラッギング
②左ボタンを離すと
青い枠線が表示される。
D. 「On Click」プロパティにイベントハンドラの関数名を入力
①「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
import
import
import
// 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();
}
});
}
android.app.Activity;
android.os.Bundle;
android.view.View;
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);
}
実行しているところ
B. 実行例
C. レイアウトファイルが用意されている理由
①画面デザインをやりやすくするため。
②レイアウトを修正するのにプログラムを修正する必
要がない。
③通常は、画面デザインはデザイナーに、コードはプ
ログラマにと作業分担することが多い。
(4)イベントリスナによるイベント処理
A. イベントリスナを使う
① 「On click」プロパティにメソッド名を設定する方法では、On Clickイ
ベント以外が使えない。
② 本来のJavaのイベント処理は、イベントリスナを定義して組み込むとい
う方法(デリゲートイベントモデル)である。
③ Androidの場合、クリック時のイベントハンドラは、Viewクラスの内部
インターフェースとして組み込まれているので、以下をimportする。
android.view.View.OnClickListener
④ イベントハンドラのメソッドは以下のとおり。
public void onClick(View v){
/* クリックのとき実行する処理 */
}
⑤ 次のようにして組み込む
[ウィジェット】.setOnClickListener(【View.OnClickListener】);
package jp.eclipse;
B. 組み込み例
import android.app.Activity;
(「On Click」プロパティは消去)
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() {
@Override
public void onClick(View v) {
Toast toast = Toast.makeText(activity,“リスナによる実行”,
Toast.LENGTH_LONG);
toast.show();
} });
}
}
Java 1.6で実行すること
C. 実行例
(5)リスナクラスを実装する方法
A. 方法の手順
① リスナクラスを「implements」で実装する。
② そのリスナをボタンのリスナとして登録する。
Public void onCreate(・・・){
・
・
・
【ウィジェット】.setOnClickListener(new 【リスナクラス名】());
}
class 【リスナクラス名】 implements OnClickListener{
public void onClick(View v){
/* クリックされたときの処理 */
}
リスナ登録
}
ボタンがクリックされたとき
呼び出されるメソッド
リスナクラスの宣言
package jp.eclipse;
B. 組み込み例(その1)
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());
}
組み込み例(その2)
(例は動的配置とくみあわせている)
class buttonClickListener implements OnClickListener{
public void onClick(View v){
textV.setText("ご注文ありがとうございます。");
}
}
}
Java 1.6で実行すること
C. 実行例