目次
- 1 ダイアログボックスの表示
- 1.1 実行画面
- 1.2 コード
- 1.3 AlertDialog.Builder(Context context)
- 1.4 setItems(CharSequence[] items, DialogInterface.OnClickListener listener)
- 1.5 setMessage(CharSequence message)
- 1.6 setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
- 1.7 setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener)
- 1.8 setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener)
- 2 日付を入力するダイアログ
- 3 時刻を入力するダイアログ
- 4 進捗表示するダイアログ
ダイアログボックスの表示
AlertDialog.builderを利用する。
実行画面
ダイアログにタイトルとリストアイテムを表示してNG,Cancel,OKの3つボタンを配置。押したボタンに対応したToast表示をさせる。
コード
メソッドチェーンで記述。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import 色々; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AlertDialog.Builder alert = new AlertDialog.Builder(this); String[] items = {"リスト1","リスト2","リスト3","リスト4"}; alert.setTitle("こんにちは") .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, which + 1 + "番目が選択されました。", Toast.LENGTH_LONG).show(); } }) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "OKボタンが押されました", Toast.LENGTH_LONG).show(); } }) .setNeutralButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "Cancelボタンが押されました", Toast.LENGTH_LONG).show(); } }) .setNegativeButton("NG", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "NGボタンが押されました", Toast.LENGTH_LONG).show(); } }).show(); } } |
AlertDialog.Builder(Context context)
アラートダイアログを作成するためのクラス。
引数はコンテキスト。onCreateの中なので省略しているが、明示的に書く場合はMainActivity.thisとなる。
setItems(CharSequence[] items, DialogInterface.OnClickListener listener)
ダイアログにリストを表示するメソッド。
第一引数:String配列
第二引数:クリックしたリストのindex
オーバーライドしたonClickに処理を記述することで、リストからクリックされた時の処理を行う。
今回は何番目のアイテムをクリックしたかをToast表示させている。
setMessage(CharSequence message)
ダイアログに文字列を表示するメソッド。引数は表示したい文字列。
setItemsと競合するため、今回は利用していない。
setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
ダイアログボタンに肯定ボタンを表示するメソッド。
第一引数:ボタン上に表示する文字列
第二引数:ボタンを押した時のリスナー登録
setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener)
ダイアログボタンに中立ボタンを表示するメソッド。
setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener)
ダイアログボタンに否定ボタンを表示するメソッド。
日付を入力するダイアログ
ボタンを押すと日付入力ダイアログが現れ、完了ボタンを押すとEditTextに日付が挿入されるアプリ。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import 色々; public class MainActivity extends Activity { EditText et; Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findView(); addEvent(); } private void findView() { et = (EditText)findViewById(R.id.editText1); btn = (Button)findViewById(R.id.button1); } private void addEvent() { btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int date = calendar.get(Calendar.DATE); new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { et.setText(String.format("%d/%02d/%02d", year,monthOfYear+1,dayOfMonth)); } }, year, month, date).show(); } }); } } |
Calendar
日付、時刻等を表示、操作などを行うためのクラス。
getInstance()
カレンダーを取得します。
引数なしで現在時刻を取得します。
get(int field)
指定されたカレンダーフィールドの値を返す。
今回は年(YEAR)、月(MONTH)、日(DATE)の値を取得した。
DatePickerDialog (Context context, DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)
日付取得ウィジェットをダイアログ表示するクラス。
コンストラクタの引数は
第一引数:コンテキスト
第二引数:ボタンを押した時のコールバック登録
第三引数:年の初期値
第四引数:月の初期値
第五引数:日の初期値
今回初期値は現在年月日を指定している。
DatePickerDialog.OnDateSetListener
入力された日付をコールバックするインターフェイス。
抽象メソッドonDateSetに記述した処理を行う。
今回は選択した年月日をEditTextに表示する。
月は0~11を取得しているため、1を足して1~12月を表示するようにした。
なんで月だけ配列そのままやねん・・・・
実行画面
時刻を入力するダイアログ
「日付を入力するダイアログ」の項でハイライトされているコード(25~35行目)の部分を下記コードに入れ替えただけのもの。挙動も日付入力→時刻入力に変更しただけ。
コード
25 26 27 28 29 30 31 32 33 34 |
Calendar calendar = Calendar.getInstance(); int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { et.setText(String.format("%02d:%02d", hourOfDay,minute)); } }, hour, minute, true).show(); |
ほとんどDate→Timeに変更されただけなので説明割愛。
あと年月日→時分に変更されているくらい。
実行画面
進捗表示するダイアログ
進捗状況を表示します。
割と見慣れたぐるぐる回ってる奴です。
ProgressDialogクラスを使います。
コンストラクタはProgressDialog(Context context)。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import 色々; public class MainActivity extends Activity implements Runnable { ProgressDialog mProgressDialog; Thread mThread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mProgressDialog = new ProgressDialog(this); mProgressDialog.setTitle("処理中…"); mProgressDialog.setMessage("処理終了までお待ちください"); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setIndeterminate(false); mProgressDialog.setCancelable(false); mProgressDialog.setMax(10000); mProgressDialog.show(); mThread = new Thread(this); mThread.start(); } @Override public void run() { int count = 1; while (true) { mProgressDialog.setProgress(count); count++; try { Thread.sleep(1); } catch (InterruptedException e) { Log.d("TAG", e.toString()); } if (count >= mProgressDialog.getMax()) { break; } } mProgressDialog.dismiss(); } } |
setTitle (CharSequence title)
タイトルを設定するメソッド。
継承したAlertDialogクラスのメソッド。
引数はタイトルにしたい文字列。
setMessage(CharSequence message)
メッセージを設定するメソッド。
引数:表示したい文字列
setProgressStyle(int style)
スタイルを設定する。
フィールドは2つ。
STYLE_HORIZONTAL:水平バー
STYLE_SPINNER:くるくる回る。進行状況の表示はない。
setIndeterminate (boolean indeterminate)
進捗バーを不確定モードにするか決める。
引数:trueかfalse
trueだと水平バーでも進行状況を表示しなくなる。
falseがデフォルトなのでtrueでない限りこのメソッドの実装は必要ない・・・・
setCancelable (boolean flag)
戻るボタンやダイアログ外をクリックすると途中終了できるか決める。
Dialogクラスから継承されたメソッド。
引数:trueかfalse
falseだと途中終了が禁止される。
trueがデフォルトなのでtrueでない限りこのメソッドの実ss(ry
setMax (int max)
最大値を設定する
引数:最大値にしたい整数。0~10000(公式リファレンスより)
show()
画面に表示する。おなじみ。
setProgress (int value)
プログレスの値をセットする。
今回は1から10000に向かって数値が増えるようにwhile文で回している。
getMax()
setMaxで指定した値を取得する
dismiss()
ダイアログを閉じる
実行画面
やべえ。そろそろUnityの記事書かないとサイト名的にやべえ・・・・
今日のひとこと
からっぽです(キリッ
あれ?この孤独感は何だ?
コメント
No Trackbacks.