我分别用了5个按钮来演示这五个例子的效果,我先来讲解一下这五个效果分别是什么吧:
在注释中我把警告对话框简写为警告框了,下面来看下完整的代码:
AlertDialogActivity中的代码:
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class AlertDialogActivity extends AppCompatActivity {
private Button mBtn1, mBtn2, mBtn3, mBtn4, mBtn5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_alert_dialog);
// 初始化按钮组件
mBtn1 = findViewById(R.id.alert_btn_1);
mBtn2 = findViewById(R.id.alert_btn_2);
mBtn3 = findViewById(R.id.alert_btn_3);
mBtn4 = findViewById(R.id.alert_btn_4);
mBtn5 = findViewById(R.id.alert_btn_5);
onClick onClick = new onClick();
// 给按钮添加监听事件
mBtn1.setOnClickListener(onClick);
mBtn2.setOnClickListener(onClick);
mBtn3.setOnClickListener(onClick);
mBtn4.setOnClickListener(onClick);
mBtn5.setOnClickListener(onClick);
}
class onClick implements View.OnClickListener {
@Override
public void onClick(View v) {
switch (v.getId()) {
// 一个警告框,带两个按钮
case R.id.alert_btn_1:
final AlertDialog.Builder builder = new AlertDialog.Builder(AlertDialogActivity.this);
// 设置标题
builder.setTitle("提示");
//设置内容
builder.setMessage("你想休息吗?");
// 设置一个按和点击事件
builder.setNegativeButton("不想", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(AlertDialogActivity.this, "到12点了必须睡,不管想不想都得执行!", Toast.LENGTH_SHORT).show();
}
});
// 设置一个按钮和点击事件
builder.setPositiveButton("想", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(AlertDialogActivity.this, "别想了,没12点不可能让你睡觉的!这就是命!", Toast.LENGTH_SHORT).show();
}
});
// 显示警告框,如果没有这句话,上面的都没有用,因为不会显示
builder.show();
break;
// 一个警告框,带两个选项,注意:如果是选项,请不要设置内容(Message)否则内容将覆盖选项
case R.id.alert_btn_2:
AlertDialog.Builder builder1 = new AlertDialog.Builder(AlertDialogActivity.this);
builder1.setTitle("你好,亲!请选择性别!");
// 通过字符串数组来表示选项的内容
final String sex[] = {"男", "女"};
builder1.setItems(sex, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击选项后,输出选择的选项的内容
Toast.makeText(AlertDialogActivity.this, sex[which], Toast.LENGTH_SHORT).show();
}
});
builder1.show();
break;
// 一个警告框,带两个单选按钮,也别设置内容(Message),否则可能会覆盖
case R.id.alert_btn_3:
AlertDialog.Builder builder2 = new AlertDialog.Builder(AlertDialogActivity.this);
builder2.setTitle("请选择性别");
final String sex1[] = {"男", "女"};
// 此处的1代表默认选择的位置,我上面的字符数组来看,0是男,1是女
builder2.setSingleChoiceItems(sex1, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 设置点击单选按钮后消失
dialog.dismiss();
Toast.makeText(AlertDialogActivity.this, sex1[which], Toast.LENGTH_SHORT).show();
}
});
// 设置点击警告框的其它的位置警告框是否消失,如果此处的setCancelable中的数值是false,那么点其它位置就不会消失了
builder2.setCancelable(true);
builder2.show();
break;
// 一个警告框,带三个多选框和两个按钮,注意:也不要设置内容(Message),否则可能会覆盖
case R.id.alert_btn_4:
AlertDialog.Builder builder3 = new AlertDialog.Builder(AlertDialogActivity.this);
// 多选框内容
final String hobby[] = {"编程", "唱歌", "运动"};
// 多选框的选择状态
boolean isChecked[] = {false, false, true};
builder3.setTitle("请选择你喜欢的兴趣");
builder3.setMultiChoiceItems(hobby, isChecked, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(AlertDialogActivity.this, hobby[which] + ":" + isChecked, Toast.LENGTH_SHORT).show();
}
});
builder3.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(AlertDialogActivity.this, "已确定", Toast.LENGTH_SHORT).show();
}
});
builder3.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(AlertDialogActivity.this, "已取消", Toast.LENGTH_SHORT).show();
}
});
builder3.show();
break;
//自定义的警告框,需要自己写一个布局文件,然后在加载这个布局文件
case R.id.alert_btn_5:
AlertDialog.Builder builder4 = new AlertDialog.Builder(AlertDialogActivity.this);
builder4.setTitle("亲!请登录!");
// 将写好的布局文件加载然后赋值给view
View view = LayoutInflater.from(AlertDialogActivity.this).inflate(R.layout.layout_custom_dialog, null);
// 初始化这个控件中的组件
EditText txt = view.findViewById(R.id.dialog_name);
EditText pwd = view.findViewById(R.id.dialog_pwd);
Button btn = view.findViewById(R.id.dialog_btn);
// 设置自定义布局中的按钮的点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(AlertDialogActivity.this, "恭喜你!登录成功!", Toast.LENGTH_SHORT).show();
}
});
// 将警告框的内容设置为view,也就是设置你写的那个布局中的内容
builder4.setView(view);
// 设置点击其它位置,警告框消失
builder4.setCancelable(true);
builder4.show();
break;
}
}
}
}
因为第5个按钮演示的是自定义的AlertDialog,所以布局文件是自己写的,这里的布局文件名是:layout_custom_dialog.xml。
layout_custom_dialog.xml的代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="20dp">
<EditText
android:id="@+id/dialog_name"
android:layout_width="match_parent"
android:layout_height="40dp"
android:hint="请输入用户名"
android:inputType="text" />
<EditText
android:id="@+id/dialog_pwd"
android:layout_width="match_parent"
android:layout_height="40dp"
android:hint="请输入密码"
android:inputType="textPassword" />
<Button
android:id="@+id/dialog_btn"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_margin="10dp"
android:text="登录"
android:textSize="15sp" />
LinearLayout>
AlertDialogActivity的布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<Button
android:id="@+id/alert_btn_1"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="Style1"
android:textAllCaps="false"
android:textSize="18sp" />
<Button
android:id="@+id/alert_btn_2"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="Style2"
android:textAllCaps="false"
android:textSize="18sp" />
<Button
android:id="@+id/alert_btn_3"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="Style3"
android:textAllCaps="false"
android:textSize="18sp" />
<Button
android:id="@+id/alert_btn_4"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="Style4"
android:textAllCaps="false"
android:textSize="18sp" />
<Button
android:id="@+id/alert_btn_5"
android:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="Style5"
android:textAllCaps="false"
android:textSize="18sp" />
LinearLayout>
LinearLayout>