1. 默认样式
DialogActivity
package com.example.hello;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.hello.util.ToastUtil;
public class DialogActivity extends AppCompatActivity {
private Button btnDialog1, btnDialog2, btnDialog3, btnDialog4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
// 获取
btnDialog1 = findViewById(R.id.btn_dialog_1);
btnDialog2 = findViewById(R.id.btn_dialog_2);
btnDialog3 = findViewById(R.id.btn_dialog_3);
btnDialog4 = findViewById(R.id.btn_dialog_4);
setListeners();
}
private void setListeners() {
Onclick onclick = new Onclick();
btnDialog1.setOnClickListener(onclick);
btnDialog2.setOnClickListener(onclick);
btnDialog3.setOnClickListener(onclick);
btnDialog4.setOnClickListener(onclick);
}
class Onclick implements View.OnClickListener {
@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_dialog_1:
AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this);
// 默认, 设置标题, 设置内容, 设置图标, 设置按钮 积极, 中立, 消极
builder1.setTitle("问题").setMessage("今天心情如何?").setIcon(R.mipmap.ic_launcher_round).setPositiveButton("非常好!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, "今天心情非常好!");
}
}).setNeutralButton("一般般!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, "今天心情一般般!");
}
}).setNegativeButton("很糟糕!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, "今天心情很糟糕!");
}
}).show();
break;
case R.id.btn_dialog_2:
case R.id.btn_dialog_4:
case R.id.btn_dialog_3:
break;
default:
throw new IllegalStateException("Unexpected value: " + v.getId());
}
}
}
}
activity_dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="15dp"
tools:context=".DialogActivity">
<Button
android:id="@+id/btn_dialog_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/style1" />
<Button
android:id="@+id/btn_dialog_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/style2" />
<Button
android:id="@+id/btn_dialog_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/style3" />
<Button
android:id="@+id/btn_dialog_4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/style4" />
</LinearLayout>
2. 单选样式
package com.example.hello;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.hello.util.ToastUtil;
public class DialogActivity extends AppCompatActivity {
private Button btnDialog1, btnDialog2, btnDialog3, btnDialog4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
// 获取
btnDialog1 = findViewById(R.id.btn_dialog_1);
btnDialog2 = findViewById(R.id.btn_dialog_2);
btnDialog3 = findViewById(R.id.btn_dialog_3);
btnDialog4 = findViewById(R.id.btn_dialog_4);
setListeners();
}
private void setListeners() {
Onclick onclick = new Onclick();
btnDialog1.setOnClickListener(onclick);
btnDialog2.setOnClickListener(onclick);
btnDialog3.setOnClickListener(onclick);
btnDialog4.setOnClickListener(onclick);
}
class Onclick implements View.OnClickListener {
@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_dialog_1:
AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this);
// 默认, 设置标题, 设置内容, 设置图标, 设置按钮 积极, 中立, 消极
builder1.setTitle("问题").setMessage("今天心情如何?").setIcon(R.mipmap.ic_launcher_round).setPositiveButton("非常好!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, "今天心情非常好!");
}
}).setNeutralButton("一般般!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, "今天心情一般般!");
}
}).setNegativeButton("很糟糕!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, "今天心情很糟糕!");
}
}).show();
break;
case R.id.btn_dialog_2:
AlertDialog.Builder builder2 = new AlertDialog.Builder(DialogActivity.this);
String[] items2 = {"男", "女"};
// 单选
builder2.setTitle("请选择性别: ").setItems(items2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, items2[which]);
}
}).show();
break;
case R.id.btn_dialog_3:
AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this);
String[] items3 = {"男", "女"};
// 默认选择第一个, setCancelable(false): 点击周围不会消失.
builder3.setTitle("请选择性别: ").setSingleChoiceItems(items3, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ToastUtil.showShortToast(DialogActivity.this, items3[which]);
// 消失
dialog.dismiss();
}
}).setCancelable(false).show();
break;
case R.id.btn_dialog_4:
break;
default:
throw new IllegalStateException("Unexpected value: " + v.getId());
}
}
}
}
3. 多选样式
package com.example.hello;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.hello.util.ToastUtil;
public class DialogActivity extends AppCompatActivity {
private Button btnDialog1, btnDialog2, btnDialog3, btnDialog4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
// 获取
btnDialog1 = findViewById(R.id.btn_dialog_1);
btnDialog2 = findViewById(R.id.btn_dialog_2);
btnDialog3 = findViewById(R.id.btn_dialog_3);
btnDialog4 = findViewById(R.id.btn_dialog_4);
setListeners();
}
private void setListeners() {
Onclick onclick = new Onclick();
btnDialog1.setOnClickListener(onclick);
btnDialog2.setOnClickListener(onclick);
btnDialog3.setOnClickListener(onclick);
btnDialog4.setOnClickListener(onclick);
}
class Onclick implements View.OnClickListener {
@SuppressLint("NonConstantResourceId")
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_dialog_1:
AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this);
// 默认, 设置标题, 设置内容, 设置图标, 设置按钮 积极, 中立, 消极
builder1.setTitle("问题").setMessage("今天心情如何?").setIcon(R.mipmap.ic_launcher_round).setPositiveButton("非常好!", (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, "今天心情非常好!")).setNeutralButton("一般般!", (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, "今天心情一般般!")).setNegativeButton("很糟糕!", (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, "今天心情很糟糕!")).show();
break;
case R.id.btn_dialog_2:
AlertDialog.Builder builder2 = new AlertDialog.Builder(DialogActivity.this);
String[] items2 = {"男", "女"};
// 单选
builder2.setTitle("请选择性别: ").setItems(items2, (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, items2[which])).show();
break;
case R.id.btn_dialog_3:
AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this);
String[] items3 = {"男", "女"};
// 默认选择第一个, setCancelable(false): 点击周围不会消失.
builder3.setTitle("请选择性别: ").setSingleChoiceItems(items3, 0, (dialog, which) -> {
ToastUtil.showShortToast(DialogActivity.this, items3[which]);
// 消失
dialog.dismiss();
}).setCancelable(false).show();
break;
case R.id.btn_dialog_4:
// 多选
AlertDialog.Builder builder4 = new AlertDialog.Builder(DialogActivity.this);
String[] items4 = {"打球", "游泳", "学习", "打游戏", "看动漫"};
// 和 items4 个数相同, true 表示选中, false 表示没有选中
boolean[] isSelected = {false, false, true, true, true};
builder4.setTitle("请选择爱好: ").setMultiChoiceItems(items4, isSelected, (DialogInterface.OnMultiChoiceClickListener) (dialog, which, isChecked) -> {
ToastUtil.showShortToast(DialogActivity.this, items4[which] + ": " + isChecked);
}).setPositiveButton("确定", (DialogInterface.OnClickListener) (dialog, which) -> {
ToastUtil.showShortToast(DialogActivity.this, "确定");
}).setNegativeButton("取消", (DialogInterface.OnClickListener) (dialog, which) -> {
ToastUtil.showShortToast(DialogActivity.this, "取消");
}).show();
break;
default:
throw new IllegalStateException("Unexpected value: " + v.getId());
}
}
}
}
4. 自定义样式
需要建立一个 layout_dialog.xml 文件.
<?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"
android:padding="15dp">
<EditText
android:id="@+id/dialog_username"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="15dp"
android:autofillHints=""
android:background="@drawable/bg_username"
android:drawableStart="@mipmap/username"
android:drawablePadding="10dp"
android:hint="@string/username"
android:inputType="text"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:textColor="@color/red"
android:textSize="16sp" />
<EditText
android:id="@+id/dialog_password"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="15dp"
android:autofillHints=""
android:background="@drawable/bg_username"
android:drawableStart="@mipmap/password"
android:drawablePadding="10dp"
android:hint="@string/password"
android:inputType="textPassword"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:textColor="@color/red"
android:textSize="16sp" />
<Button
android:id="@+id/dialog_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_btn4"
android:text="@string/login_en"
android:textAllCaps="false"
android:textColor="@color/white"
android:textSize="23sp" />
</LinearLayout>
package com.example.hello;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import com.example.hello.util.ToastUtil;
public class DialogActivity extends AppCompatActivity {
private Button btnDialog1, btnDialog2, btnDialog3, btnDialog4, btnDialog5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
// 获取
btnDialog1 = findViewById(R.id.btn_dialog_1);
btnDialog2 = findViewById(R.id.btn_dialog_2);
btnDialog3 = findViewById(R.id.btn_dialog_3);
btnDialog4 = findViewById(R.id.btn_dialog_4);
btnDialog5 = findViewById(R.id.btn_dialog_5);
setListeners();
}
private void setListeners() {
Onclick onclick = new Onclick();
btnDialog1.setOnClickListener(onclick);
btnDialog2.setOnClickListener(onclick);
btnDialog3.setOnClickListener(onclick);
btnDialog4.setOnClickListener(onclick);
btnDialog5.setOnClickListener(onclick);
}
class Onclick implements View.OnClickListener {
@SuppressLint({"NonConstantResourceId", "InflateParams"})
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_dialog_1:
AlertDialog.Builder builder1 = new AlertDialog.Builder(DialogActivity.this);
// 默认, 设置标题, 设置内容, 设置图标, 设置按钮 积极, 中立, 消极
builder1.setTitle("问题").setMessage("今天心情如何?").setIcon(R.mipmap.ic_launcher_round).setPositiveButton("非常好!", (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, "今天心情非常好!")).setNeutralButton("一般般!", (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, "今天心情一般般!")).setNegativeButton("很糟糕!", (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, "今天心情很糟糕!")).show();
break;
case R.id.btn_dialog_2:
AlertDialog.Builder builder2 = new AlertDialog.Builder(DialogActivity.this);
String[] items2 = {"男", "女"};
// 单选
builder2.setTitle("请选择性别: ").setItems(items2, (dialog, which) -> ToastUtil.showShortToast(DialogActivity.this, items2[which])).show();
break;
case R.id.btn_dialog_3:
AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this);
String[] items3 = {"男", "女"};
// 默认选择第一个, setCancelable(false): 点击周围不会消失.
builder3.setTitle("请选择性别: ").setSingleChoiceItems(items3, 0, (dialog, which) -> {
ToastUtil.showShortToast(DialogActivity.this, items3[which]);
// 消失
dialog.dismiss();
}).setCancelable(false).show();
break;
case R.id.btn_dialog_4:
// 多选
AlertDialog.Builder builder4 = new AlertDialog.Builder(DialogActivity.this);
String[] items4 = {"打球", "游泳", "学习", "打游戏", "看动漫"};
// 和 items4 个数相同, true 表示选中, false 表示没有选中
boolean[] isSelected = {false, false, true, true, true};
builder4.setTitle("请选择爱好: ").setMultiChoiceItems(items4, isSelected, (DialogInterface.OnMultiChoiceClickListener) (dialog, which, isChecked) -> {
ToastUtil.showShortToast(DialogActivity.this, items4[which] + ": " + isChecked);
}).setPositiveButton("确定", (DialogInterface.OnClickListener) (dialog, which) -> {
ToastUtil.showShortToast(DialogActivity.this, "确定");
}).setNegativeButton("取消", (DialogInterface.OnClickListener) (dialog, which) -> {
ToastUtil.showShortToast(DialogActivity.this, "取消");
}).show();
break;
case R.id.btn_dialog_5:
AlertDialog.Builder builder5 = new AlertDialog.Builder(DialogActivity.this);
View inflate = LayoutInflater.from(DialogActivity.this).inflate(R.layout.layout_dialog, null);
Button login = inflate.findViewById(R.id.dialog_login);
login.setOnClickListener(view -> {
ToastUtil.showShortToast(DialogActivity.this, "登录成功");
});
builder5.setTitle("请先登录").setView(inflate).show();
break;
default:
throw new IllegalStateException("Unexpected value: " + v.getId());
}
}
}
}