標籤:
轉自:Android之 對話方塊 的使用
一個對話方塊通常是在當前Activity之前顯示的一個小的視窗。下面的Activity失去了焦點,上面的對話方塊接收使用者的互動資訊。對話方塊通常用來作為提示以及直接與程式運行過程相關的短暫停留介面。
AlertDialog
描述:一個可以處理0個、1個、2個或3個按鈕,和/或一組包含複選框或選項按鈕等可以選擇的項。AlertDialog足夠勝任建立和使用者互動的大部分對話方塊,並且它也是被推薦的對話方塊類型。具體如下:
建立一個AlertDialog
一個AlertDialog對話方塊繼承與Dialog類。你應該使用如下特性來裝點你的對話方塊:
l 一個標題
l 一條資訊
l 1、2、或3個按鈕
l 一組可供選擇的項(複選框或者選項按鈕)
為了建立一個AlertDialog,可以使用AlertDialog.Builder子類。使用
AlertDialog.Builder(Context)得到一個對話方塊構造器,然後使用該類的共有方法來定義AlertDialog對話方塊的所有屬性。在你使用對話方塊構造器設定完屬性之後,調用create()方法即可得到一個AlertDialog的對象。
添加按鈕
為了建立一個有著一個個按鈕緊挨著的AlertDialog對話方塊,就像所示的那樣,可以使用set…Button()方法:
主要代碼如下:
btn1 = (Button) findViewById(R.id.dlg_with_btns);
// 點擊按鈕後建立AlertDialog對話方塊
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
// 先建立對話方塊構造器
AlertDialog.Builder builder =
new AlertDialog.Builder(MainActivity.this);
// 建立完後設定對話方塊的屬性
// 標題
builder.setMessage("Welcome to my blog on CSDN?")
// 不可取消(即返回鍵不能取消此對話方塊)
.setCancelable(false)
// 設定第一個按鈕的標籤及其事件監聽器
.setPositiveButton("Good",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// ..
}
})
// 設定第二個按鈕的標籤及其事件監聽器
.setNegativeButton("Need improving",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
// ..
}
});
// 用對話方塊構造器建立對話方塊
AlertDialog alert = builder.create();
// 顯示對話方塊
alert.show();
}
});
首先,調用setMessage(CharSequence)來設定對話方塊的標題。然後,開始方法鏈並用setCancelable(boolean)設定對話方塊不能被取消(使用者不能使用返回鍵來關閉對話方塊)。為每個按鈕,使用set…Button()方法中的一個,例如setPositiveButton(),它需要傳入按鈕的標籤,以及當使用者點擊該按鈕後預設動作的DialogInterface.OnClickListener事件監聽器。(用SetNeutralButton()來設定中間按鈕)
注意:每種類型的按鈕你僅僅可以為AlertDialog添加一個。也就是說,你不能擁有多於一個的”positive”按鈕。這樣就限制了可能擁有的最多按鈕的情況:positive、neutral、negative。這些名字技術上來講和你按鈕的實際功能毫無關係,但應該可以協助你跟蹤每個按鈕做了什麼事。
添加一個列表
像一樣,為了添加一系列可選擇的列表到AlertDialog,可以使用setItems()方法。
具體代碼如下:
btn2 = (Button) findViewById(R.id.dlg_with_list);
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
final CharSequence[] items =
{"Engineer", "Student", "IT-_-!"};
AlertDialog.Builder builder =
new AlertDialog.Builder(MainActivity.this);
builder.setTitle("What‘s your job?")
.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item],
Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
首先,用setTitle(CharSequence)方法設定對話方塊的標題。然後,調用setItems()來添加一系列可選擇項,這個方法接收可選項的顯示內容數組以及一個定義當使用者選中一個項目時所進行的動作的DialogInterface.OnClickListener事件監聽器。
添加複選框和選項按鈕
為了在對話方塊內部建立一系列多項項目(複選框)或者單選項目(單選框),可以分別使用setMultiChoiceItems()和setSingleChoiceItems()方法。假如你在onCreateDialog()回掉方法中建立其中的一種可選項目,Android系統會為你管理這一組可選項目的狀態。只要這個Activity是活動的,對話方塊就會記得這些可選項目之前的狀態,但當使用者離開此Activity時,之前的選擇狀態就會丟失。
具體代碼如下:
btn3.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
final CharSequence[] items =
{"NanJing", "ShangHai", "YanChen", "Other.."};
AlertDialog.Builder builder =
new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Where do you live?");
builder.setSingleChoiceItems(items, -1,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item],
Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
提示:為了在使用者離開或者暫停Activity時儲存選擇狀態,你必須在Activity的生命週期中儲存或恢複設定。為了永久的儲存選擇狀態,你需要使用一種資料存放區技術來儲存設定。
建立一個自訂對話方塊
假如你想擁有一個自訂的對話方塊,你可以為對話方塊建立你自己的布局。在你定義好布局之後,可將根類View的對象或者布局資源ID傳給setContentView(View)。
自訂對話方塊如下所示:
例如,為了建立如下形式的對話方塊,大致需要的步驟為:
1、建立對話方塊布局檔案,例如在layout下建立custom_dialog.xml檔案,內容如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip">
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="10dip"/>
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#FFFFFF"/>
</LinearLayout>
這個XML布局檔案在LinearLayout(線性布局中)定義了一個ImageView和TextView。
2、將以上布局檔案設定為對話方塊的布局,並且定義ImageView和TextView的內容元素:
btn4 = (Button) findViewById(R.id.dlg_customized);
btn4.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");
TextView text = (TextView)
dialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView)
dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.icon);
dialog.show();
}
});
在你初始化對話方塊之後,使用setContentView(int)來設定對話方塊的布局為自訂的布局,需要傳入的參數為布局檔案的ID。既然對話方塊已經定義了一個布局,你可以使用findViewById(int)來找到組件,並且可以更改它們的顯示內容。
需要注意的地方:
1)最下面在對話方塊布局檔案上為了找到image及text組件時,是使用的
dialog.findViewById,不然會程式會出現異常而退出!
2)最後不要忘了dialog.show();不然什麼都看不到。
小結:本篇簡要地介紹了對話方塊的使用,其中,一般比較常用的就是第一種對話方塊,簡潔明了,最後一種對話方塊配合複雜的布局,要是能夠用好的話,可以實現很不錯的效果。
Android基礎(13)——對話方塊 的使用