2012年03月27日

チェックボックスダイアログを作成する


アラートダイアログをチェックボックスにカスタムしてみたいと思います
アラートダイアログの作成は以下を参照してください
アラートダイアログを表示させる
今回はアラートダイアログに3つの項目のチェックボックスを表示させ
自分で選択したものをTextViewに反映するものを使用したいと思います

まずはmain.xmlにボタンとテキストビューを1つずつ配置します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >


    <Button
    	android:id="@+id/button1"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="ダイアログ表示" />

    <TextView
    	android:id="@+id/textView1"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="TextView" />

</LinearLayout>
次にMainActivity.javaを修正します
動作の目的としては
(1)ボタンを押すとアラートダイアログが表示
(2)チェックボックスの項目を選択する
(3)OKボタンでテキストビューに選択したものが反映される
とします

(1)ボタンを押すとアラートダイアログが表示
button bにid button1を設定します
そのあとsetOnClickListenerでボタンが押された時の動作を定義します
ボタンがクリックされるイベントを取得
ボタンを押すとアラートダイアログ dlgが作成されるようにします

(2)チェックボックスの項目を選択する
アラートダイアログにチェックボックスを表示させるには
setMultiChoiceItemsを使用します
また、表示するリストと初期の選択の有無はあらかじめ設定しておきます

3)OKボタンでテキストビューに選択したものが反映される
最後にOKボタンの設定をして押されるとテキストビューに反映されるようにします

以下にMainActivity.javaを記載します
package blog.test;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends Activity {


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setTitle("MainActivity");
        
        //表示するリストを作成
        final CharSequence[] list = new CharSequence[3];
        list[0] = "りんご";list[1] = "みかん";list[2] = "いちご";
     	
		/**item初期値設定**/
		final boolean[] checkedItems = new boolean[3];
		checkedItems[0]=true;checkedItems[1]=true;checkedItems[2]=true;
        
        //id button1をbに当てはめている
        Button b = (Button)findViewById(R.id.button1);
        //bが押された時の動作
        b.setOnClickListener(new View.OnClickListener() {

			public void onClick(View v) {
	        	final StringBuffer select= new StringBuffer();
				/**アラートダイアログ設定**/
				AlertDialog.Builder dlg=
				        new AlertDialog.Builder(MainActivity.this);
				dlg.setTitle("くだもの一覧");
				dlg.setMultiChoiceItems(list, checkedItems, 
						new DialogInterface.OnMultiChoiceClickListener() {
					public void onClick(DialogInterface dialog, int which,
					boolean isChecked) {
						//デフォルトで項目が選択されているかどうかを示す論理値を、配列で指定
						checkedItems[which]=isChecked;
						}
					});
				/**OKボタンが押された時の設定**/
				dlg.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {	
						for(int i=0;i

今回のリストは“りんご”“みかん”“いちご”としました
checkedItemsにより初期値はすべて選択されている状態です
ture→falseにすると選択してない状態でダイアログが表示されます
ダイアログ内ではcheckedItems[which]によって値を参照しています

プログラムを実行すると・・・
device65.png
初期画面です
TextViewは初期値そのままです

ボタンを押すと・・・
device66.png
アラートダイアログが表示されます

りんご・みかんを選択した状態でOKを押すと・・・
device67.png

device68.png
テキストビューに選択したものが反映されます

スポンサードリンク

2012年02月02日

カスタムダイアログ(DatePicker)


DatePickerをカスタムダイアログとして表示させる
前回のカスタムダイアログの内容をDatePickerにしてみたいと思います
OKボタンを押すと入力されている日付がとれる仕組みです
カスタムダイアログを表示させる
<参考>日付入力(DatePicker)する ボタンが押されるとダイアログが表示されるところまでは前回と同じです
クリックされた時のイベントを以下のように書き換えます
    	//カスタムレイアウトを作成
    	LinearLayout layout = new LinearLayout(TestActivity.this);
    	//カスタムレイアウトの中身を作成
    		// 今日の日付を取得
    		Calendar c = Calendar.getInstance();
    		int y = c.get(Calendar.YEAR);
    		int m = c.get(Calendar.MONTH);
    		int d = c.get(Calendar.DAY_OF_MONTH);
    	//データピッカーを作成
    	final DatePicker dp1 = new DatePicker(TestActivity.this);
    	dp1.init(y, m, d,null);//年・月・日を入力
    		layout.addView(dp1);//レイアウトに入れる
    	//アラートダイアログを作成
    	AlertDialog.Builder dlg=
    			new AlertDialog.Builder(TestActivity.this);
    	dlg.setView(layout);
    	//OKボタンの設定
    	dlg.setPositiveButton("Ok", new DialogInterface.OnClickListener()
    		{public void onClick(DialogInterface dialog, int id) {
    			int Y = dp1.getYear();//年を取得
    			int M = dp1.getMonth();//月を取得
    			int D = dp1.getDayOfMonth();//日を取得
    			//ログに出力
    			Log.i("tag",String.format("%d年%d月%d日",Y,M+1,D ));
    		}});
    	dlg.setTitle("タイトル");
    	dlg.show();
初期値に本日の日付を取得して入力
OKボタンでログ出力をしています
また dp1.init(y, m, d,null);//年・月・日を入力
でのnullは日付が変更された時のイベントを取得するときに
使うっぽいですw
(未確認、、、これから勉強します)
tag01.JPG
スポンサードリンク

カスタムダイアログを表示させる


前回アラートダイアログを表示させましたが
今回はダイアログの中身をカスタムしたいと思います
ボタンが押されるとダイアログが表示されるところまでは前回と同じです

アラートダイアログを表示させる

クリックされた時のイベントを以下のように書き換えます
    	//カスタムレイアウトを作成
    	LinearLayout layout = new LinearLayout(TestActivity.this);
    	//カスタムレイアウトの中身を作成
    	TextView text = new TextView(TestActivity.this);
    		text.setText("カスタムレイアウト");
    		layout.addView(text);
    	//アラートダイアログを作成
    	AlertDialog.Builder dlg=
    			new AlertDialog.Builder(TestActivity.this);
    	dlg.setView(layout);
    	dlg.setTitle("タイトル");
    	dlg.show();
ダイアログの中身をlayoutで先に作成し
dlg.setView(layout);でダイアログに表示させる設定をしています
device13.png
これだけだと少し物淋しいですけどねw
スポンサードリンク

アラートダイアログを表示させる


アラートダイアログ(AlertDialog)とは・・・
その名の通りユーザーに注意喚起するボックスを表示させることです
まずは簡単な文字だけのものを表示させてみます

res/layout/mainにまずボタンを一つだけ配置します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >

    <Button
    	android:id="@+id/button_test"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="Button" />

</LinearLayout>
次にsrcのactivityをボタンが押された時の処理と
トーストの表示ができるようにしておきます
詳しくは以下を参照してください
ボタンがクリックされるイベントを取得
クリックされた時のイベントにアラートダイアログを表示させるプログラムを追記します
package blog.test;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Toast;

public class TestActivity extends Activity implements OnClickListener {
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        /**buttonのidを設定**/
        Button button1=(Button)findViewById(R.id.button_test);
        /**ボタンが押されたらonClickが動作するよう設定**/
        button1.setOnClickListener(this);

        }

/**ボタンが押された時の処理**/
public void onClick(View v){
    switch(v.getId()){
      case R.id.button_test:
          AlertDialog.Builder dlg;//dlgというalartDialogを作成
	                dlg = new AlertDialog.Builder(TestActivity.this);
	                dlg.setTitle("テスト");
	                dlg.setMessage("AlertDialogを表示");
	                dlg.show();
          break;

    }
}
    
    /**トースト設定**/
    protected void showMessage(String msg){
        Toast.makeText(
            this,
            msg, Toast.LENGTH_LONG).show();
    }
    

}
ここにAlertDialog.Builderというのが出てくる
これは簡単に言うとつくったAlertDialog.Builder dlgにBuilderで
次々にパラメータを設定していってAlertDialogを作っていくものである
.setTitle("");でタイトルを
.setMessage("");で表示内容を
そして.show();で表示させています
device12.png
スポンサードリンク