Dialog就是一种对话框弹窗
样式
-
默认样式
-
单选样式
-
多选样式
-
自定义样式
方法:
- setTitle:设置选项卡的标题
- setMessage:设置提示信息,比如题干
- setIcon:设置图标
- setItems:设置选项列表,使用数组做参数
- setSingleChoiceItems:设置单选选项列表,使用数组做参数
- setMultiChoiceItems:设置多选选项列表,使用数组作为参数,可选择传入标记数组作为参数
- 三种选项按钮
- setPositiveButton:
- setNegativeButton
- setNeutralButton
注意点:这里监听器里的参数i从1开始,并且顺序从最右侧到最左侧为1、2、3,与添加顺序无关。最右侧是PositiveButton,在其左边一点的是NegativeButton,最左侧是NeutralButton。
Activity.this和getApplicationContext()的区别
- activity.this 代表的就是当前的activity,继承context,父类当中有的方法子类中一定有,子类中有的方法父类中不一定有,在用getApplicationContext()一定能使用activity.this,但是能用activity.this不一定能使用getApplicationContext()!
- 在使用跟对话框相关的操作的时候必须使用activity.this不能使用getApplicationContext()
案例
package com.example.test;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.example.test.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_dialog1);
btnDialog2 = findViewById(R.id.btn_dialog2);
btnDialog3 = findViewById(R.id.btn_dialog3);
btnDialog4 = findViewById(R.id.btn_dialog4);
btnDialog5 = findViewById(R.id.btn_dialog5);
Onclick onclick = new Onclick();
btnDialog1.setOnClickListener(onclick);
btnDialog2.setOnClickListener(onclick);
btnDialog3.setOnClickListener(onclick);
btnDialog4.setOnClickListener(onclick);
btnDialog5.setOnClickListener(onclick);
}
private class Onclick implements OnClickListener {
@Override
public void onClick(View view) {
Intent intent = null;
switch (view.getId()){
case R.id.btn_dialog1:
//建造者模式
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
/* builder.setTitle("请回答");
builder.setMessage("1+1=?");*/
//设置标题,设置消息,设置图标
//这里监听器里的参数i从1开始,并且顺序从最右侧到最左侧为1、2、3,与添加顺序无关。最右侧是PositiveButton,在其左边一点的是NegativeButton,最左侧是NeutralButton
builder.setTitle("请回答").setMessage("你觉得我长得怎么样").setIcon(R.drawable.checked)
//设置一个积极的按钮
.setPositiveButton("好看", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtil.showMsg(DialogActivity.this,"真会说话~~ 位置i:"+i);
}
//一个中性的按钮
}).setNeutralButton("我不知道", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtil.showMsg(DialogActivity.this,"你再瞅瞅位置i:"+i);
}
//一个消极的按钮
}).setNegativeButton("不好看", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtil.showMsg(DialogActivity.this,"去屎吧你位置i:"+i);
}
}).show();
break;
case R.id.btn_dialog2:
//单选
String[] gender2 = {"man","women"};
AlertDialog.Builder builder2 = new AlertDialog.Builder(DialogActivity.this);
builder2.setTitle("选择性别" ).setItems(gender2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//i是从0开始,可以对应数组下标
ToastUtil.showMsg(DialogActivity.this,gender2[i]+i);
}
}).show();
break;
case R.id.btn_dialog3:
String[] gender3 = {"man","women"};
AlertDialog.Builder builder3 = new AlertDialog.Builder(DialogActivity.this);
builder3.setTitle("选择性别").setSingleChoiceItems(gender3, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtil.showMsg(DialogActivity.this,gender3[i]);
//点击选项时选择框消失
dialogInterface.dismiss();
}
//设置点击选择框外面区域选择框不会消失
}).setCancelable(false).show();
break;
case R.id.btn_dialog4:
//多项选择
String[] hobby = {"唱","跳","rap","打篮球"};
//这是一个标记数组,用来标记上面数组对应位置是否选中
boolean[] flag = {false,false,true,false};
AlertDialog.Builder builder4 = new AlertDialog.Builder(DialogActivity.this);
builder4.setTitle("选择兴趣").setMultiChoiceItems(hobby, flag, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
ToastUtil.showMsg(DialogActivity.this,hobby[i]+":"+b);
}
}).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtil.showMsg(DialogActivity.this,"干些确定之后应该处理的事");
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ToastUtil.showMsg(DialogActivity.this,"干些取消之后应该处理的事");
}
}).show();
break;
case R.id.btn_dialog5:
AlertDialog.Builder builder5 = new AlertDialog.Builder(DialogActivity.this);
View v = LayoutInflater.from(DialogActivity.this).inflate(R.layout.layout_dialog,null);
EditText username = v.findViewById(R.id.et_username);
EditText password = v.findViewById(R.id.et_password);
Button login = v.findViewById(R.id.btn_login);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ToastUtil.showMsg(DialogActivity.this,"登录成功");
}
});
builder5.setTitle("请登录").setView(v).show();
break;
}
}
}
}