第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Android 入門教程

菜單類控件
菜單:Menu
并發(fā)編程
多線程

對話框:AlertDialog

前兩節(jié)我們講到了 Toast 和 Notification,這兩個屬于單向的通知,也就是說只能由我們給用戶傳遞信息,而不能接收用戶的選擇。當你希望在 Acitivity 內(nèi)給用戶傳遞信息的同時給用戶一些選擇權(quán),并且不希望切換屏幕頁面的時候,AlertDialog 將是最佳的選擇。

1. AlertDialog 的特性

對話框是一個可以用來展示提示信息并支持用戶輸入的小彈窗

AlertDialog 可以用來讓用戶提交問題、做選擇、確定/取消操作、向用戶發(fā)送通知、錯誤等信息。它可以幫助我們在不跳轉(zhuǎn) Activity 的情況下輕松彈出一個懸浮窗,在本節(jié)課程中,我們會討論如何創(chuàng)建各種各樣常見的對話框。

2. AlertDialog 的常用 API

AlertDialog 在使用中主要以 API 為主,常用方法如下:

  • setIcon(Drawable icon):
    設置Alert Dialog窗口的icon
  • setCancelable(boolean cancel able):
    設置是否支持取消(取消通常是指點窗口外或者點“Back”)
  • setTitle(CharSequence title):
    設置對話框上的標題
  • setMessage(CharSequence message):
    設置對話框上的提示信息
  • setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener):
    在對話框上添加多選列表,參數(shù)描述:
    • items:多選項文本數(shù)組
    • checkedItems:默認狀態(tài),true表示默認選中;false默認取消
    • listener:用戶選擇監(jiān)聽器
  • setOnCancelListener(DialogInterface.OnCancelListener onCancelListener):
    設置關(guān)閉監(jiān)聽器,在用戶關(guān)閉的時候回調(diào)此接口
  • setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener):
    設置確定監(jiān)聽器,在用戶點擊確定的時候回調(diào)此接口
  • setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener):
    設置取消監(jiān)聽器,在用戶選擇“取消”、“否定”等時候毀掉此接口

3. AlertDialog 的使用方法

AlertDialog 的用法和上一節(jié)的 Notification 類似,系統(tǒng)也提供了 Builder 建造者,通過 Builder 的create()方法可以創(chuàng)建對話框,然后通過show()方法展示,如下:

AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

3.1 使用步驟

Step 1: 創(chuàng)建AlertDialog.Builder對象
我們也可以直接創(chuàng)建 AlertDialog,但這樣不方便我們自定義一些功能及樣式,所以更多時候還是會采用構(gòu)建者模式中的 Builder 對象幫助我們?nèi)?gòu)建我們需要的 AlertDialog。

Step 2: 設置對話框的內(nèi)容樣式
這里主要涉及到圖標icon、標題以及提示內(nèi)容四個部分,對應以下 3 個接口:

  • setIcon
  • setTitle
  • setMessage

這幾個是幾乎所有對話框都會用到的方法,對于一些特殊樣式的 AlertDialog 還會有一些特殊接口,具體的方法我們會在下一個小節(jié)看到。

Step 3: 設置按鈕
分別調(diào)用setPositiveButton()setNegativeButton()、setNeutralButton()來設置“確定”、“取消”、“中立”按鈕的顯示文本及點擊事件回調(diào)。

Step 4: 創(chuàng)建 AlertDialog對象并展示
在設置完對話框的樣式之后,我們直接調(diào)用 Builder 的create()方法創(chuàng)建 AlertDialog 實例,最后調(diào)用 show()方法將對話框顯示出來。

3.2 普通對話框

一個普通的 AlertDialog 也是大家日常見到最多的一種,直接彈出一個提示,然后給出 1 - 3 個選項,比如“是”、“否”、“取消”等等,使用方法非常簡單,基本上可以直接套用 3.1小節(jié)的步驟,代碼如下:

package com.emercy.myapplication;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.alert).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		AlertDialog alertDialog = builder
				.setIcon(R.drawable.warning)
				.setTitle("系統(tǒng)消息:")
				.setMessage("彈出一個普通的AlertDialog,\n提供確定、退出、取消三個Button")
				.setPositiveButton("確定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Toast.makeText(MainActivity.this, "已確定", Toast.LENGTH_SHORT).show();
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Toast.makeText(MainActivity.this, "已為您取消", Toast.LENGTH_SHORT).show();
					}
				}).setNeutralButton("退出", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Toast.makeText(MainActivity.this, "已退出對話框", Toast.LENGTH_SHORT).show();
					}
				}).create();             // 通過 create() 創(chuàng)建AlertDialog對象
		alertDialog.show();     		 // 通過 show() 展示對話框
	}
}

然后為 Activity 編寫一個布局文件,其中放置一個 Button 用于觸發(fā)對話框,如下:

<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"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">
      
   <Button
      android:layout_centerInParent="true"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="彈出普通 AlertDialog"
      android:id="@+id/alert" />
</RelativeLayout>

編譯之后點擊屏幕中間的 Button,彈出來的就是一個普通對話框了。我們設置了“確定”、“取消”、“中立” 3 個Button,分別表示“確定”、“取消”以及“退出對話框” 3 種操作,實際使用中,可以在回調(diào)接口里針對 3 種 Button 設置不同的回調(diào)邏輯,效果如下:

普通AlertDialog

3.3 單選對話框

單選對話框在普通對話框的基礎之上增加一個用戶的輸入,顧名思義,我們可以給用戶提供一些選項讓用戶勾選,然后在點擊“確定”之后獲取到用戶的選擇。
通過setSingleChoiceItems方法設置一個字符串數(shù)組作為單選項,然后通過DialogInterface.OnClickListener接口監(jiān)聽用戶的選擇操作。

package com.emercy.myapplication;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	final String[] hero_road = new String[] { "對抗路", "打野", "中路", "發(fā)育路", "輔助" };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.alert).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		AlertDialog alert = builder
				.setIcon(R.drawable.warning)
				.setTitle("選擇你要走的峽谷分路")
				.setSingleChoiceItems(hero_road, 0,
						new DialogInterface.OnClickListener()  {
							@Override
							public void onClick(DialogInterface dialog, int which) {
								Toast.makeText(getApplicationContext(),"我要玩" + hero_road[which], Toast.LENGTH_SHORT).show();
							}
						}).create();
		alert.show();
	}
}

效果如下:

單選對話框

3.4 多選對話框

布局文件保持不變,只需要修改點擊事件即可。通過setMultiChoiceItems()接口設置一個多選列表,在用戶選擇的時候系統(tǒng)會回調(diào)onClick()方法,在其中可以記錄下用戶的選擇,代碼如下:

package com.emercy.myapplication;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	final String[] hero_road = new String[] { "對抗路", "打野", "中路", "發(fā)育路", "輔助" };
	private boolean[] checked = new boolean[hero_road.length];
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.alert).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		 AlertDialog.Builder builder = new AlertDialog.Builder(this);
	        AlertDialog alert = builder
	                .setIcon(R.drawable.warning)
	                .setTitle("選擇你擅長的峽谷分路")
	                .setMultiChoiceItems(hero_road, null, new DialogInterface.OnMultiChoiceClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which, boolean isChecked) {
							checked[which] = isChecked;		
						}
					}).setPositiveButton("確定", new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							StringBuilder stringBuilder = new StringBuilder();
							stringBuilder.append("“");
							for (int i = 0; i < hero_road.length; i++) {
								if (checked[i]) {
									stringBuilder.append(hero_road[i]);
									stringBuilder.append(",");
								}
							}
							stringBuilder.deleteCharAt(stringBuilder.length() - 1);
							stringBuilder.append("”");
							Toast.makeText(MainActivity.this, "我擅長" + stringBuilder, Toast.LENGTH_SHORT).show();
						}
					}).create();
	        alert.show();
	}
}

效果如下:

多選對話框

3.5 列表對話框

使用列表對話框會彈出一個選擇列表,用戶可以從列表中選擇一個并直接關(guān)閉對話框,設置列表采用setItems()接口:

package com.emercy.myapplication;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	final String[] hero_road = new String[] { "對抗路", "打野", "中路", "發(fā)育路", "輔助" };

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById(R.id.alert).setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		 AlertDialog.Builder builder = new AlertDialog.Builder(this);
	        AlertDialog alert = builder
	                .setIcon(R.drawable.warning)
	                .setTitle("選擇你要走的峽谷分路")
	                .setItems(hero_road, new DialogInterface.OnClickListener() {
	                    
	                    @Override
	                    public void onClick(DialogInterface dialog, int which) {
	                        Toast.makeText(getApplicationContext(),"我要走" + hero_road[which], Toast.LENGTH_SHORT).show();    
	                    }
	                }).create();
	        alert.show();
	}
}

效果如圖:

列表對話框

4. 小結(jié)

AlertDialog 相比前兩節(jié)學到的 Toast 和 Notification 而言,它會直接擋住用戶的界面,等待用戶主動關(guān)閉,是一個比較強的通知方式。因此在使用的時候一定要慎重,不要使用的太頻繁而對用戶造成過度的打擾。AlertDialog 不但可以給用戶通知,還能輕易的接收用戶的選擇,互動性比較強。它的創(chuàng)建方法通常是采用構(gòu)建者模式,通過 AlertDialog.Builder 類來定制它的樣式及內(nèi)容,根據(jù)樣式的不同常用的有“普通對話框”、“單選對話框”、“多選對話框”以及“列表對話框”,在設置完成之后通過create()創(chuàng)建 AlertDialog,最終通過show()完成展示。這種通過 Builder 來構(gòu)建的方式在 Android 中非常常用,你學會了嗎?