標籤:
對話方塊 Dialog
什麼是對話方塊
對話方塊是在當前的頁面之上彈出的小視窗, 用於顯示一些重要的提示資訊, 提示使用者的輸入,確認資訊,
或顯示某種狀態.如 : 顯示進度條對話方塊, 退出提示.
對話方塊的特點:
1, 當前介面彈出的小視窗.
2, 使用者要與它進行互動, 可以接收使用者輸入的資訊, 也可以反饋資訊給使用者.
常用對話方塊:
1, 普通對話方塊 AlertDialog
2, 進度條對話方塊 ProgressDialog
3, 日期對話方塊 DatePickerDialog
4, 時間對話方塊 TimePickerDialog
5, 自訂對話方塊
常用普通對話方塊 AlertDialog
1, 普通列表對話方塊 setItems -- onClickListener
2, 單選對話方塊 setSingleChoiceItems -- onClickListener
3, 多選對話方塊 setMultiChoiceItems --- > onMultiChoiceClickListener
4, 適配器對話方塊 setAdapter -- onClickListener
package com.qf.day11_dialog_01;import java.util.Calendar;import android.app.Activity;import android.app.AlertDialog;import android.app.DatePickerDialog;import android.app.DatePickerDialog.OnDateSetListener;import android.app.ProgressDialog;import android.app.TimePickerDialog;import android.app.TimePickerDialog.OnTimeSetListener;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.view.View;import android.widget.DatePicker;import android.widget.EditText;import android.widget.TimePicker;import android.widget.Toast;public class MainActivity extends Activity { private EditText name;private EditText pwd;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void showAlertDialog(View v) { //1, 定義普通對話方塊的構建者 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); //2, 構建對話方塊 builder.setIcon(R.drawable.img_23);//設定表徵圖 builder.setTitle("提示");//設定標題 builder.setMessage("是否確認退出?");//設定內容 //設定取消按鈕 /** * text按鈕顯示的文字 * listener 按鈕對應的監聽器 */ builder.setNegativeButton("取消", null); //設定確定按鈕 builder.setPositiveButton("確定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}}); //3, 顯示對話方塊 builder.show(); } public void showProgressDialog(View v) { //1, 得到ProgressDialog的對象 ProgressDialog pDialog = new ProgressDialog(this); //2, 構建對話方塊 pDialog.setIcon(R.drawable.img_14); pDialog.setTitle("提示"); pDialog.setMessage("正在載入, 請稍後...."); pDialog.setCancelable(true);//是否可撤銷 true 可以 false 不可以 //設定進度條對話方塊的樣式 //ProgressDialog.STYLE_HORIZONTAL 水平的 //ProgressDialog.STYLE_SPINNER 轉圈的 pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //3, 顯示對話方塊 pDialog.show(); //pDialog.dismiss();//對話方塊消失 pDialog.setProgress(50);//設定進度值, 在顯示對話後,才可以設定 } public void showDatePickerDialog(View v) { //擷取系統的當前日期 Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int monthOfYear = calendar.get(Calendar.MONTH); int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); //1, 建立帶有日期選取器的對話方塊 /** * context內容物件 * callBackonDateSetListener(日期選取器上的"確定"按鈕監聽器) * year預設的年 * monthOfYear 預設的月份 * dayOfMonth 預設的日期 */ DatePickerDialog dPDialog = new DatePickerDialog(this,new OnDateSetListener() { /** * DatePicker view 日期選取器 */@Overridepublic void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {//選擇後的日期監聽Toast.makeText(MainActivity.this, year+"-"+(monthOfYear+1)+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();}}, year, monthOfYear, dayOfMonth); //2, 顯示對話方塊 dPDialog.show(); } public void showTimePickerDialog(View v) { //1, 建立帶有時間選取器的對話方塊 /** * context 內容物件 * callBack onTimeSetListener * hourOfDay 預設的小時 * minute 預設的分鐘數 * is24HourView 是否24小時制 */ TimePickerDialog tpDialog = new TimePickerDialog(this, new OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Toast.makeText(MainActivity.this, hourOfDay + " :" + minute, Toast.LENGTH_SHORT).show();}}, 15, 17, true); //2, 顯示對話方塊 tpDialog.show(); } //自訂對話方塊(在普通對話方塊基礎上實現) public void showCustomDialog(View v) { //1, 得到普通對話方塊的構建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); //2, 構建對話方塊 builder.setIcon(R.drawable.img_23); builder.setTitle("使用者登陸"); //3, 為對話方塊設定自訂的視圖 View view = getLayoutInflater().inflate(R.layout.login, null); name = (EditText) view.findViewById(R.id.name); pwd = (EditText) view.findViewById(R.id.pwd); builder.setView(view); //為對話方塊添加 按鈕 builder.setNegativeButton("取消", null); builder.setPositiveButton("登陸", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String info = name.getText().toString()+", "+ pwd.getText().toString();Toast.makeText(MainActivity.this, info, Toast.LENGTH_SHORT).show();}}); //4, 顯示對話方塊 builder.show(); }}
package com.qf.day11_dialog_02;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.DialogInterface.OnClickListener;import android.content.DialogInterface.OnMultiChoiceClickListener;import android.graphics.Color;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.TextView;public class MainActivity extends Activity {private TextView tv;private int position;//單選列表的 中間轉接 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); } //普通列表對話方塊 public void showCommon(View v) { //1, 得到普通對話方塊的構建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("選擇顏色"); //2, 設定列表 //getResources().getStringArray(id) builder.setItems(R.array.colors, new OnClickListener() { /** * DialogInterface dialog 對話方塊 * int which當前選中的item 從0開始 */@Overridepublic void onClick(DialogInterface dialog, int which) {switch (which) {case 0:tv.setTextColor(Color.RED);break;case 1:tv.setTextColor(Color.GREEN);break;case 2:tv.setTextColor(Color.BLUE);break;}}}); //3, 顯示對話方塊 builder.show(); } //單選列表 public void showSingle(View v) { //1, 得到普通對話方塊的構建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("設定文字大小"); //2, 設定單選列表 /** * items選項資源的ID R.array.sizes * checkedItem 預設選中的item的下標, 如果沒有預設選中, 那麼設定為-1 * listener監聽器 */ builder.setSingleChoiceItems(R.array.sizes, -1, new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 把當前選中的Item的下標 賦值給全域的變數 positionposition = which;}}); builder.setPositiveButton("確定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO 根據全域的position 判斷該執行什麼樣的操作switch (position) {case 0:tv.setTextSize(20);break;case 1:tv.setTextSize(30);break;case 2:tv.setTextSize(40);break;}}}); //3, 顯示對話方塊 builder.show(); } //多選列表 public void showMulti(View v) { //1, 得到普通對話方塊的構建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("設定內容"); //2, 設定多選列表 /** * items資源的ID * checkedItems 當前選中的Item * listener監聽器 */ //得到所有的資料 final String[] hobbys = getResources().getStringArray(R.array.hobbys); //選中的Item final boolean[] checkedItems = new boolean[hobbys.length]; builder.setMultiChoiceItems(R.array.hobbys, checkedItems, new OnMultiChoiceClickListener() { /** * DialogInterface dialog目前的交談框 * int which當前選擇的Item下標 * boolean isChecked當前選擇Item的狀態 */@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {//改變boolean[] 中狀態checkedItems[which] = isChecked;}}); builder.setPositiveButton("確定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {StringBuilder sBuilder = new StringBuilder();for(int i=0;i<checkedItems.length;i++){if(checkedItems[i]){sBuilder.append(hobbys[i]).append(" ");}}tv.setText(sBuilder.toString());}}); //3, 顯示對話方塊 builder.show(); } //適配器列表 public void showAdapter(View v) { //1, 得到普通對話方塊的構建者 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("選擇設定"); //2, 設定適配器 String[] data = getResources().getStringArray(R.array.settings); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); builder.setAdapter(adapter, new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent = new Intent();switch (which) {case 0:intent.setAction("android.settings.WIFI_SETTINGS");break;case 1:intent.setAction("android.settings.SOUND_SETTINGS");break;case 2:intent.setAction("android.settings.SETTINGS");break;}startActivity(intent);}}); //3, 顯示對話方塊 //builder.show(); builder.create().show(); }}
Android 對話方塊 Dialog