Android中Dialog對話框的調用及監聽


Android中經常會需要在Android界面上彈出一些對話框提示用戶,比如App的退出的時候都會有各種框來挽留你的心,支付寶的時候輸入密碼的密碼框,非常常見及其實用的功能,類似於JS中的alter,C#中C/S中常用MessgeBox,總而言之就是一個功能彈,彈,彈,本文就簡單的敘述一下Dialog的各種彈框使用及監聽,順便寫了一個簡單的自定義彈框,接下來請看正文:

一般對話框

先看下整個App頁面:

看下一般對話框的結果:

 

具體代碼的實現,其中定義了兩個按鈕,一個是確定(PositiveButton)按鈕,一個是取消(NegativeButton)按鈕:

	builder = new AlertDialog.Builder(this);
			builder.setTitle("親,你真的要離開嗎?");
			// 相當於確定
			builder.setPositiveButton("退出",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Toast.makeText(MainActivity.this, "是的,哥要走了",
									Toast.LENGTH_SHORT).show();
						}
					});
			// 相當於取消
			builder.setNegativeButton("再看看",
					new DialogInterface.OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Toast.makeText(MainActivity.this, "行,哥再看會",
									Toast.LENGTH_SHORT).show();
						}
					});

			builder.show();

 ICON對話框

上面只是用到了兩個按鈕,其實還有一個是中立按鈕,另外發現每次都寫一個監聽事件感覺太麻煩了,可以單獨寫一個監聽事件去判斷哪個事件被觸發了:

 

單獨定義個DialogClickListener:

	private DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {

		@Override
		public void onClick(DialogInterface dialog, int which) {
			// TODO Auto-generated method stub
			switch (which) {
			case DialogInterface.BUTTON_POSITIVE:
				Toast.makeText(MainActivity.this, "強烈支持" + which,
						Toast.LENGTH_SHORT).show();
				break;
			case DialogInterface.BUTTON_NEUTRAL:
				Toast.makeText(MainActivity.this, "跟我無關,我是中立的" + which,
						Toast.LENGTH_SHORT).show();
				break;
			case DialogInterface.BUTTON_NEGATIVE:
				Toast.makeText(MainActivity.this, "強烈反對" + which,
						Toast.LENGTH_SHORT).show();
				break;
			default:
				break;
			}
		}
	};

  按鈕事件的調用:

	builder = new AlertDialog.Builder(this);
			builder.setTitle("XX視頻");
			builder.setIcon(android.R.drawable.btn_star);
			builder.setMessage("如何看待香港占中事件?");
			builder.setPositiveButton("支持", dialogClickListener);
			builder.setNegativeButton("反對", dialogClickListener);
			// 中立
			builder.setNeutralButton("中立", dialogClickListener);
			builder.show();

列表對話框

看下效果圖:

 

代碼實現: 

		builder = new AlertDialog.Builder(this);
			builder.setTitle("NBA幻覺");
			builder.setIcon(android.R.drawable.btn_star);
			final String[] nameArrStrings = new String[] { "馬刺很老", "小牛很弱",
					"火箭很強" };
			builder.setItems(nameArrStrings, new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					Toast.makeText(MainActivity.this, nameArrStrings[which],
							Toast.LENGTH_SHORT).show();
				}
			});
			builder.setPositiveButton("確定", new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub

				}
			});
			builder.setNegativeButton("取消", new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub

				}
			});
			builder.show();

  單選對話框

效果圖:

代碼實現:

	builder = new AlertDialog.Builder(this);
			builder.setTitle("NBA球隊");
			builder.setIcon(android.R.drawable.btn_radio);
			final String[] ballArr = new String[] { "騎士", "熱火", "凱爾特人" };
			builder.setSingleChoiceItems(ballArr, 1, new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					Toast.makeText(MainActivity.this, ballArr[which],
							Toast.LENGTH_SHORT).show();
				}
			});
			builder.setPositiveButton("確定", new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub

				}
			});
			builder.setNegativeButton("取消", new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub

				}
			});
			builder.show();

  多選對話框

效果圖:

 

代碼實現:

	builder = new AlertDialog.Builder(this);
			builder.setTitle("NBA球星");
			builder.setIcon(android.R.drawable.btn_radio);
			final String[] ballstartArr = new String[] { "鄧肯", "諾維斯基", "萊昂納德",
					"科比" };
			final boolean[] multiCheckedArrStrings = new boolean[] { true,
					false, true, false };
			builder.setMultiChoiceItems(ballstartArr, multiCheckedArrStrings,
					new OnMultiChoiceClickListener() {

						@Override
						public void onClick(DialogInterface dialog, int which,
								boolean isChecked) {
							// TODO Auto-generated method stub
							StringBuffer buffer = new StringBuffer();
							for (int i = 0; i < multiCheckedArrStrings.length; i++) {
								if (multiCheckedArrStrings[i]) {
									buffer.append(ballstartArr[i] + ",");
								}
							}
							buffer.deleteCharAt(buffer.length() - 1);
							Toast.makeText(MainActivity.this, buffer,
									Toast.LENGTH_SHORT).show();
						}
					});

			builder.setPositiveButton("確定", new OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub

				}
			});
			builder.show();

  文本對話框

比如說支付寶,轉賬的時候你需要輸入密碼,彈出一個密碼輸入框,效果如圖:

代碼實現,,這個時候你需要給builder中的view賦值:

		builder = new AlertDialog.Builder(this);
			builder.setTitle("輸入密碼");
			builder.setIcon(android.R.drawable.btn_star);
			final EditText editText = new EditText(MainActivity.this);
			builder.setView(editText);
			builder.setPositiveButton("確定",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Toast.makeText(MainActivity.this,
									"輸入的密碼是:" + editText.getText(),
									Toast.LENGTH_SHORT).show();
						}
					});
			builder.setNegativeButton("取消",
					new DialogInterface.OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Toast.makeText(MainActivity.this, "取消",
									Toast.LENGTH_SHORT).show();
						}
					});

			builder.show();

 

  自定義對話框

上面的那個EditText是創建的,其實可以自定義一個布局,然后通過填充進去,效果如下:

自定義一個dialog_text.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密碼:" />

    
    <EditText
        android:id="@+id/edit_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

  代碼實現:

		builder = new AlertDialog.Builder(this);
			builder.setTitle("輸入密碼");
			builder.setIcon(android.R.drawable.btn_star);
			final EditText editText = new EditText(MainActivity.this);
			builder.setView(editText);
			builder.setPositiveButton("確定",
					new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Toast.makeText(MainActivity.this,
									"輸入的密碼是:" + editText.getText(),
									Toast.LENGTH_SHORT).show();
						}
					});
			builder.setNegativeButton("取消",
					new DialogInterface.OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Toast.makeText(MainActivity.this, "取消",
									Toast.LENGTH_SHORT).show();
						}
					});

			builder.show();

------------2015.11.15更新---忘記寫了,還有一種是進度條對話框,簡單的進度對話框和帶進度的對話框-----

代碼如下:

 

	ProgressDialog  progressDialog=new  ProgressDialog(this);
			progressDialog.setTitle("XX助手");
			progressDialog.setMessage("XX正在更新。。。");
			progressDialog.show();

 

顯示進度的對話框:

 

代碼如下:

		final ProgressDialog  precentDialog=new  ProgressDialog(this);
			precentDialog.setTitle("XX下載");
			precentDialog.setMessage("XX正在更新。。。");
			precentDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);                                   
			precentDialog.setMax(100);
			precentDialog.show();
			new Thread(){
				public void run() {
					for (int i = 0; i < 100; i++) {
						try {
							Thread.sleep(50);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						precentDialog.setProgress(i);
					}
					precentDialog.dismiss();
				};
			}.start();  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM