Android自定义提醒对话框
在本教程中,我们将在Android应用程序中讨论和实现自定义提醒对话框。
我们已经在此处讨论了Android警报对话框。
警报对话框
默认情况下,"警报对话框"用于创建包含文本消息和按钮操作的对话框。
以下是我们在上一教程中已经讨论过的setter方法。
- setTitle
- setMessage
- setPositiveButton
- setNegativeButton
- setNeutralButton
- setPositiveButtonIcon/setNegativeButtonIcon/setNeutralButtonIcon
- setCancelable
- setIcon
- setOnDismissListener
- setItems –在警报对话框内以列表形式显示项目数组
- setMultiChoiceItems –设置要在警报对话框中选择的项目列表
- setView –用于在警报对话框内设置自定义布局视图。
- show()
- setShowListener()–在屏幕上显示警报对话框时触发。
我们可以在这里进行任何动态更改
ProgressDialog是带有ProgressBar小部件的AlertDialog。
在以下部分中,我们将创建不同类型的自定义提醒对话框:
- 带项目列表
- 使用EditText
- 使用ImageView
- 与SeekBar
- 有RatingBar
代码
下面给出了activity_main.xml布局文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btnSimpleAlert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="simpleAlert"
android:text="SIMPLE ALERT DIALOG"
<Button
android:id="@+id/btnAlertWithItems"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withItems"
android:text="WITH ITEMS"
<Button
android:id="@+id/btnAlertWithMultiChoiceItems"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withMultiChoiceItems"
android:text="WITH MULTI CHOICE ITEMS"
<Button
android:id="@+id/btnAlertWithEditText"
android:layout_width="wrap_content"
android:onClick="withEditText"
android:layout_height="wrap_content"
android:text="WITH EDIT TEXT"
<Button
android:id="@+id/btnAlertWithImageView"
android:layout_width="wrap_content"
android:onClick="withImageView"
android:layout_height="wrap_content"
android:text="WITH IMAGE VIEW"
<Button
android:id="@+id/btnAlertWithSeekBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="withSeekBar"
android:text="WITH SEEK BAR"
<Button
android:id="@+id/btnAlertWithRatingBar"
android:layout_width="wrap_content"
android:onClick="withRatingBar"
android:layout_height="wrap_content"
android:text="WITH RATING BAR"
</LinearLayout>
每个按钮都会创建一个AlertDialog。
我们为每个方法都设置了onClick方法,该方法将在MainActivity.java类中定义。
简单警报对话框
将以下方法添加到您的MainActivity.java中:
public void simpleAlert(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Simple Alert");
builder.setMessage("We have a message");
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),
"OK was clicked",
Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),
android.R.string.no, Toast.LENGTH_SHORT).show();
}
});
builder.setCancelable(false);
builder.show();
}
这是AlertDialog的最简单形式。
让我们来看看更有趣的内容。
AlertDialog.Builder用于构建AlertDialog。
要显示AlertDialog,我们也可以使用以下代码:
AlertDialog alertDialog = builder.create(); alertDialog.show();
AlertDialog显示项目列表
public void withItems(View view) {
final String[] items = {"Apple", "Banana", "Orange", "Grapes"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("List of Items")
.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), items[which] + " is clicked", Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("OK", null);
builder.setNegativeButton("CANCEL", null);
builder.setNeutralButton("NEUTRAL", null);
builder.setPositiveButtonIcon(getResources().getDrawable(android.R.drawable.ic_menu_call, getTheme()));
builder.setIcon(getResources().getDrawable(R.drawable.jd, getTheme()));
AlertDialog alertDialog = builder.create();
alertDialog.show();
Button button = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
button.setBackgroundColor(Color.BLACK);
button.setPadding(0, 0, 20, 0);
button.setTextColor(Color.WHITE);
}
在setItems方法中,我们传递要显示的字符串数组。
其中哪个参数包含被单击列表项的索引。
我们可以通过在alertDialog实例上检索Button实例并设置文本颜色等来自定义Button文本和样式。
默认情况下,按钮的颜色是从styles.xml中定义的colorAccent值设置的
具有多个选择列表的AlertDialog
public void withMultiChoiceItems(View view) {
final String[] items = {"Apple", "Banana", "Orange", "Grapes"};
final ArrayList<Integer> selectedList = new ArrayList<>();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("This is list choice dialog box");
builder.setMultiChoiceItems(items, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
selectedList.add(which);
} else if (selectedList.contains(which)) {
selectedList.remove(which);
}
}
});
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ArrayList<String> selectedStrings = new ArrayList<>();
for (int j = 0; j < selectedList.size(); j++) {
selectedStrings.add(items[selectedList.get(j)]);
}
Toast.makeText(getApplicationContext(), "Items selected are: " + Arrays.toString(selectedStrings.toArray()), Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
这是我们之前看到的简单项目列表的更好版本。
列表中的每个项目旁边都有一个CheckBox。
isChecked布尔值返回checkBox当前状态。
单击"按钮"后,我们通过将填充的selectedItems转换为ArrayList来显示所选项目的列表。
具有EditText的AlertDialog
使用setView属性,我们可以从布局中设置自定义视图,也可以通过编程方式进行。
在下面的函数中,我们以编程方式完成了此操作。
public void withEditText(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("With Edit Text");
final EditText input = new EditText(MainActivity.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
builder.setView(input);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), "Text entered is " + input.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
使用ImageView的警报对话框
其中我们将在我们的setView方法中添加自定义布局。
以下是将在AlertDialog中显示的布局:
alert_dialog_with_imageview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="350dp"
android:scaleType="centerCrop"
android:adjustViewBounds="true"
android:src="@drawable/sample"
</LinearLayout>
在MainActivity.java类中添加以下函数:
public void withImageView(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View dialogLayout = inflater.inflate(R.layout.alert_dialog_with_imageview, null);
builder.setPositiveButton("OK", null);
builder.setView(dialogLayout);
builder.show();
}
带搜索列的警报对话框
public void withSeekBar(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("With SeekBar");
final SeekBar seekBar = new SeekBar(MainActivity.this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
seekBar.setLayoutParams(lp);
builder.setView(seekBar);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), "Progress is " + seekBar.getProgress(), Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
单击按钮后,我们将显示SeekBar的进度值。
带等级列的警报对话框
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RatingBar
android:id="@+id/ratingBar"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="0.5"
</LinearLayout>
public void withRatingBar(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
builder.setTitle("With RatingBar");
View dialogLayout = inflater.inflate(R.layout.alert_dialog_with_ratingbar, null);
final RatingBar ratingBar = dialogLayout.findViewById(R.id.ratingBar);
builder.setView(dialogLayout);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), "Rating is " + ratingBar.getRating(), Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
在MainActivity.java类中添加了上述所有方法之后,就可以构建并运行我们的应用程序。

