1 效果圖
先看效果圖:
2 概述
AlertDialog生成的對話框可分爲4個區域:圖標區,標題區,內容區,按鈕區
結構如圖:
AlertDialog的構造方法全部是Protected的,所以不能直接通過new一個AlertDialog來創建出一個AlertDialog。要創建一個AlertDialog,就要用到AlertDialog.Builder中的create()方法。
AlertDialog對話框的使用步驟:
1,創建AlertDialog.Builder對象
2,調用Builder對象的setTitle()設置標題,setIcon設置圖標
3,調用Builder對象的相關方法設置內容,AlertDialog提供如下設置指定對話框的內容:
setMessage();設置簡單文本框的內容
setItems();設置簡單列表的內容,數組
setSingleChoiceItems();;設置單選列表的內容,內容參數可以是數組Cursor,ListAdapter
setMultiChoiceItems();設置多選列表項的內容,內容參數可以是數組,Cursor
setAdapter();設置內容,內容是ListAdapter,常用的BaseAdapter,SimpleAdapter,ArrayAdapter
setView();設置內容,參數是自定義的View
setItems :設置對話框要顯示的一個list,一般用於顯示幾個命令時
4,調用Builder對象的setPositiveButton()和 setNegativeButton()設置按鈕和監聽器
5,調用Builder對象的create()方法創建AlertDialog對象,再調用AlertDialog對象的show()方法顯示對話框
總之:調用Builder對象設置圖標,標題,內容,按鈕,在create(),show()
2 概述
3 例子代碼
java代碼package mm.shandong.com.testalertdialog;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Toast;
import java.lang.reflect.Field;
import java.util.ArrayList;
public class TestAlertDialogActivity extends AppCompatActivity {
String nav_name = "AlertDialog";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_alert_dialog);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setTitle(nav_name + " demo");
}
///顯示普通對話框
public void showNomalDialog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("普通對話框");
builder.setIcon(R.drawable.head1);
builder.setMessage("對話框文本內容");
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(TestAlertDialogActivity.this,
"您點擊的是確定按鈕",
Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(TestAlertDialogActivity.this,
"您點擊的是取消按鈕",
Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
}
////顯示列表對話框
public void showListDialog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("列表對話框");
builder.setIcon(R.drawable.head2);
final String[] arrayRegion = getResources().
getStringArray(R.array.arrayRegion);
builder.setItems(arrayRegion, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int position) {
Toast.makeText(TestAlertDialogActivity.this,
arrayRegion[position], Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
}
///顯示有單選按鈕的對話框
public void showSingleListDialog(View view) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("單選列表對話框");
builder.setIcon(R.drawable.head2);
final String[] arrayRegion = getResources().getStringArray(R.array.arrayRegion);
builder.setSingleChoiceItems(arrayRegion,1,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int position) {
Toast.makeText(TestAlertDialogActivity.this,
arrayRegion[position], Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
AlertDialog alertDialog = (AlertDialog) dialogInterface;
int sp = alertDialog.getListView().getCheckedItemPosition();
String str = (String) alertDialog.getListView().getItemAtPosition(sp);
Toast.makeText(TestAlertDialogActivity.this,
str, Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(TestAlertDialogActivity.this,
"您點擊的是取消按鈕", Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
}
///顯示有多選按鈕的對話框
public void showMultiListDialog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("多選列表對話框");
builder.setIcon(R.drawable.head2);
final String[] arrayRegion = getResources().getStringArray(R.array.arrayRegion);
final boolean[] selectItems = new boolean[arrayRegion.length];
for (int i = 0; i < arrayRegion.length; i++) {
selectItems[i] = false;
}
builder.setMultiChoiceItems(arrayRegion, selectItems,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i,boolean b) {
}
});
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int position) {
String str = "";
for (int i = 0; i < arrayRegion.length; i++) {
if (selectItems[i]) {
str += arrayRegion[i] + " ";
}
}
Toast.makeText(TestAlertDialogActivity.this, str,
Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(TestAlertDialogActivity.this,
"您點擊的是取消按鈕", Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
}
///顯示設置arrayAdpater的對話框
public void showAdapterListDialog(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Adapter對話框");
builder.setIcon(R.drawable.head2);
final String[] arrayRegion = getResources().
getStringArray(R.array.arrayRegion);
ArrayAdapter arrayAdapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, arrayRegion);
builder.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.create().show();
}
///顯示自定義view的對話框
public void showViewDialog(View view) {
View view2 = getLayoutInflater().
inflate(R.layout.item_testalertdialog_alertdialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("自定義View對話框");
builder.setIcon(R.drawable.head2);
builder.setView(view2);
builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int position) {
Toast.makeText(TestAlertDialogActivity.this,
"點擊提交按鈕", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(TestAlertDialogActivity.this,
"您點擊的是取消按鈕", Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
}
///顯示對輸入表單進行驗證的對話框,如果不合法不允許關閉對話框
public void showNoClosedDialog(View view) {
View view2 = getLayoutInflater().
inflate(R.layout.item_testalertdialog_alertdialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("自定義View對話框");
builder.setIcon(R.drawable.head2);
builder.setView(view2);
final EditText et_name = (EditText) view2.findViewById(R.id.et_name);
final EditText et_phone = (EditText) view2.findViewById(R.id.et_phone);
builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int position) {
AlertDialog alertDialog = (AlertDialog) dialogInterface;
Field field = null;
try {
field = dialogInterface.getClass().
getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialogInterface, false);
} catch (Exception e) {
e.printStackTrace();
}
if (TextUtils.isEmpty(et_name.getText().toString()) ||
TextUtils.isEmpty(et_phone.getText().toString())) {
Toast.makeText(TestAlertDialogActivity.this,
"姓名或手機號不能爲空", Toast.LENGTH_SHORT).show();
} else {
try {
field.set(dialogInterface, true);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// dialogInterface.dismiss();
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Field field = null;
try {
field = dialogInterface.getClass().getSuperclass().
getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialogInterface, true);
dialogInterface.dismiss();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
});
builder.create().show();
}
}
主界面佈局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showNomalDialog"
android:text="普通對話框" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showListDialog"
android:text="簡單列表對話框" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showSingleListDialog"
android:text="單選列表對話框" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showMultiListDialog"
android:text="多選列表對話框" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showAdapterListDialog"
android:text="Adapter列表對話框" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showViewDialog"
android:text="自定義View對話框" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showNoClosedDialog"
android:text="點擊確定按鈕不關閉對話框" />
</LinearLayout>
自定義對話框view佈局文件
<?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="vertical">
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchColumns="1">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用戶名"
android:textSize="17sp" />
<EditText
android:id="@+id/et_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="請輸入用戶名"
android:selectAllOnFocus="true"
android:textColorHint="#238745" />
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密碼"
android:textSize="17sp" />
<EditText
android:id="@+id/et_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="請輸入密碼"
android:inputType="textPassword"
android:selectAllOnFocus="true" />
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="年齡"
android:textSize="17sp" />
<EditText
android:id="@+id/et_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="請輸入年齡"
android:inputType="number"
android:selectAllOnFocus="true" />
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生日"
android:textSize="17sp" />
<EditText
android:id="@+id/et_birthday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="請輸入生日"
android:inputType="date"
android:selectAllOnFocus="true" />
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="手機"
android:textSize="17sp" />
<EditText
android:id="@+id/et_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="請輸入手機號"
android:inputType="phone"
android:selectAllOnFocus="true" />
</TableRow>
</TableLayout>
</LinearLayout>