2010年9月4日土曜日

Android 画面にボタンを配置する

画面にボタンを配置し、クリック時に画面を終了するようにします。

まずパッケージエクスプローラでlayoutフォルダのmain.xml開きます。
「レイアウト」タブで画面イメージが表示されますので、ボタンをドラッグドロップします。


配置したボタンを選択し、プロパティウィンドウからTextプロパティとIdプロパティを変更します。
Textプロパティは、ボタンに表示する文字列。
Idプロパティは、オブジェクトの識別名です。
プロパティウィンドウが表示されていない場合は、
Eclipseメニュー「ウィンドウ」→「ビューの表示」→「プロパティ」をクリックします。

まずIdプロパティを「@+id/button_close」に変更します。
次にTextプロパティですが、表示する文字列をリソースファイルで管理するので
プロパティウィンドウのTextプロパティの値列に表示される「…」ボタンを押します。


Resource Chooserダイアログが表示されるので「New String…」ボタンを押します。
次に表示されるCreate New Android Stringダイアログに以下を入力し「OK」ボタンを押します。

ストリング:終了
New R.String:button_close


Resource Chooserダイアログから先ほど登録した「button_close」を選択し「OK」ボタンを押します。


リソースに追加した文字列はパッケージ・エクスプローラーのres/values/string.xmlで管理されています。



それではボタンを押したときの処理を追加します。
方法はいくつかあります。

まずはHelloWorldアクティビティにandroid.view.View.OnClickListenerインターフェースを実装する方法
package yan.android.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class HelloWorld extends Activity implements OnClickListener{
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //アクティビティに対しmain.xmlに定義されているレイアウトを適用する。
        setContentView(R.layout.main); 
        //ボタンに対してイベントリスナを設定する。
        Button button_close = (Button)findViewById(R.id.button_close );
       button_close.setOnClickListener(this);
        
    }
    
    @Override
    public void onClick(View v) {
        switch(v.getId()) {        
        case R.id.button_close: 
            //終了ボタン:アクティビティの終了
             finish();
            break;        
        }
    }

}

次は無名クラスを使った方法
package yan.android.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class HelloWorld extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //アクティビティに対しmain.xmlに定義されているレイアウトを適用する。
        setContentView(R.layout.main); 
        //ボタンに対してイベントリスナを設定する。
        Button button_close = (Button)findViewById(R.id.button_close );
        button_close.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                finish();    
            }
        });
    }
        
}

フィールドを利用した方法
package yan.android.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class HelloWorld extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //アクティビティに対しmain.xmlに定義されているレイアウトを適用する。
        setContentView(R.layout.main); 
        //ボタンに対してイベントリスナを設定する。
        Button button_close = (Button)findViewById(R.id.button_close );
        button_close.setOnClickListener(button_close_ClickListener);
    }
    
    
    private View.OnClickListener button_close_ClickListener = new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            finish();
        }};
        
}

レイアウトファイルにメソッドを指定する方法 2012/08/21 追加
レイアウトファイルのボタンに「android:onClick="メソッド名"」を指定します。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="22dp"
        android:layout_marginTop="24dp"
        tools:context=".HelloWorld" />

    <Button
        android:id="@+id/button_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="34dp"
        android:text="終了" 
        android:onClick="buttonCloseClick" />

</RelativeLayout>
ソース
package yan.android.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;

public class HelloWorld extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //アクティビティに対しmain.xmlに定義されているレイアウトを適用する。
        setContentView(R.layout.main); 
        });
    }
 
    public void buttonCloseClick(View view) {
     finish();
    }       
}

0 件のコメント: