Dialogs¶
Alerts¶
摘自 Google material design 文档
Alerts 用在需要告知用户一些情况信息的时候,是一种紧急中断,需要用户确认操作。
如何添加?¶
I. 在你的 build.gradle
添加最新版本的 appcompat
库。
dependencies { compile 'com.android.support:appcompat-v7:X.X.X' // where X.X.X version }
II. 使你的 Activity 继承自 android.support.v7.app.AppCompatActivity
。
public class MainActivity extends AppCompatActivity { ... }
III. 用 android.support.v7.app.AlertDialog.Builder
创建你的 dialog 。
private void showLocationDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle(getString(R.string.dialog_title)); builder.setMessage(getString(R.string.dialog_message)); String positiveText = getString(android.R.string.ok); builder.setPositiveButton(positiveText, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // positive button logic } }); String negativeText = getString(android.R.string.cancel); builder.setNegativeButton(negativeText, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // negative button logic } }); AlertDialog dialog = builder.create(); // display dialog dialog.show(); }
如何设置样式¶
I. 给 dialog 背景声明自定义的 drawable.xml
。
<?xml version="1.0" encoding="utf-8"?> <!-- From: support/v7/appcompat/res/drawable/abc_dialog_material_background_light.xml --> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="16dp" android:insetTop="16dp" android:insetRight="16dp" android:insetBottom="16dp"> <shape android:shape="rectangle"> <corners android:radius="2dp" /> <solid android:color="@color/indigo" /> </shape> </inset>
II. 在 styles.xml
里声明自定义的样式。
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <!--buttons color--> <item name="colorAccent">@color/pink</item> <!--title and message color--> <item name="android:textColorPrimary">@android:color/white</item> <!--dialog background--> <item name="android:windowBackground">@drawable/background_dialog</item> </style>
III. 把上面定义的 style
样式作为参数传入 AlertDialog.Builder
来创建 dialog 。
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyDialogTheme); ... AlertDialog dialog = builder.create(); // display dialog dialog.show();
备注
你同样可以在你的 activity theme 里通过 alertDialogTheme
属性设置 dialog 的样式。
Confirmation Dialogs¶
摘自 Google material design 文档
确认 dialogs 需要用户在提交之前明确的确认他们选择的选项。例如,用户可以试听多个铃声,但是只有点击 “确定” 才是最终选择。
在确认 dialogs 中点击 “取消” 或者按下返回键会取消一个动作,丢弃任何改动和关闭 dialogs 。
如何添加?¶
I. 在你的 build.grade
文件里添加最新版本的 appcompat
库。
dependencies { compile 'com.android.support:appcompat-v7:X.X.X' // where X.X.X version }
II.使你的 activity 继承自 android.support.v7.app.AppCompatActivity
.
public class MainActivity extends AppCompatActivity { ... }
III. 使用 android.support.v7.app.AlertDialog.Builder
创建 dialogs 。
单选 dialogs¶
在你的 builder
对象上使用 setSingleChoiceItems
方法创建一个单选列表 dialogs 。
public void showDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle(R.string.dialog_title); //list of items String[] items = getResources().getStringArray(R.array.ringtone_list); builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // item selected logic } }); String positiveText = getString(android.R.string.ok); builder.setPositiveButton(positiveText, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // positive button logic } }); String negativeText = getString(android.R.string.cancel); builder.setNegativeButton(negativeText, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // negative button logic } }); AlertDialog dialog = builder.create(); // display dialog dialog.show(); }
多选 dialogs¶
在你的 builder
对象上使用 setMultiChoiceItems
方法创建一个多选列表 dialogs 。
builder.setMultiChoiceItems(items, selectedItemsArray, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { //item checked logic } });
如何设置样式?¶
I. 声明自定义的 dialogs 背景 drawable.xml
<?xml version="1.0" encoding="utf-8"?> <!-- From: support/v7/appcompat/res/drawable/abc_dialog_material_background_light.xml --> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="16dp" android:insetTop="16dp" android:insetRight="16dp" android:insetBottom="16dp"> <shape android:shape="rectangle"> <corners android:radius="2dp" /> <solid android:color="@color/indigo" /> </shape> </inset>
II. 在你的 styles.xml
文件里声明自定义样式。
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <!--item RadioButton or CheckBox color--> <item name="colorControlNormal">@android:color/white</item> <item name="colorControlActivated">@color/pink</item> <!--item text color--> <item name="textColorAlertDialogListItem">@android:color/white</item> <!--buttons color--> <item name="colorAccent">@color/pink</item> <!--title and message color--> <item name="android:textColorPrimary">@android:color/white</item> <!--dialog background--> <item name="android:windowBackground">@drawable/background_dialog</item> </style>
III. 使用样式作为 AlertDialog.Builder
的参数来创建你的 dialogs 。
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyDialogTheme); ... AlertDialog dialog = builder.create(); // display dialog dialog.show();
翻译水平有限,欢迎批评指正
原文作者:Volodymyr Yatsykiv 原文地址:Dialogs