当我们点击某些事物或触发一些提示的时候,这时候对话框对话框就非常好用
生活中常用的有8种对话框如下
一.普通对话框
1.首先在布局文件创建一个属性如下
<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"
tools:context=".MainActivity"
android:orientation="vertical"
>
<Button
android:id="@+id/bu_common_dialog_box"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="普通对话框"
android:textSize="25dp"
android:onClick="onClick"
/>
</LinearLayout>
2.初始化控
3.设置监听 (设置相对应的点击事件)
4.完成对话框
5.展示对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buCommonDialogBox = (Button) findViewById(R.id.bu_common_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//判断点击的事件
switch (view.getId()) {
//普通对话框
case R.id.bu_common_dialog_box:
//普通对话框方法
CommonMethod();
break;
}
}
//普通对话框方法
private void CommonMethod() {
//创建对话框构造者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置属性
builder.setIcon(R.mipmap.ic_launcher_round).setTitle("标题区域").setMessage("内容区域");
//确认取消监听
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "确认", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
//创建构造者对象
AlertDialog dialog = builder.create();
//弹框外是否可取消弹框
dialog.setCanceledOnTouchOutside(false);
//展示到页面
dialog.show();
}
点击效果如下
二.单选对话框
1…首先在布局文件创建一个属性如下
<Button
android:id="@+id/bu_radio_dialog_box"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#fff"
android:layout_marginLeft="30dp"
android:layout_marginTop="30dp"
android:layout_marginRight="30dp"
android:text="单选对话框"
android:textSize="25dp"
android:onClick="onClick"
/>
2.初始化控件
3.设置属性和普通一样
这里只是把内容用一个字符数组包裹起来
给对话框设置单选构造者即(setSingleChoiceItems)
并设置监听
第一个参数是数据源
第二个参数是默认选择弹框第几个
第三个参数是监听事件4.获取构造者并展示.(一定不要忘了展示)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buRadioDialogBox= (Button) findViewById(R.id.bu_radio_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//判断点击的事件
switch (view.getId()) {
//单选对话框
case R.id.bu_radio_dialog_box:
//单选对话框方法
RadioMethod();
break;
}
}
private void RadioMethod() {
//创建构造者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置属性
builder.setIcon(R.mipmap.ic_launcher_round).setTitle("请选择一名队友");//.setMessage("内容区域");将内容改成单选事件
//数据
final String[] s = {"小爱同学", "小胖同学", "小花同学"};
//设置单选对话框
builder.setSingleChoiceItems(s, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "" + s[i], Toast.LENGTH_SHORT).show();
}
});
//确认取消监听
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "确认", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
//创建构造者对象
AlertDialog dialog = builder.create();
//展示到页面
dialog.show();
}
效果如下
三.多选对话框
1…首先在布局文件创建一个属性如下
<Button
android:id="@+id/bu_much_dialog_box"
android:textSize="25dp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#fff"
android:layout_marginLeft="30dp"
android:layout_marginTop="30dp"
android:layout_marginRight="30dp"
android:text="多选对话框"
android:onClick="onClick"
/>
2.初始化控件
3.设置属性和普通一样
这里只是把内容用一个字符数组包裹起来
并设置一个boolean类型的数组与上面的字符串一一对应true默认选中 false不选中给对话框设置多选构造者即(setMultiChoiceItems)
并设置监听
第一个参数是数据源
第二个参数是默认选中状态
第三个参数是监听事件4.获取构造者并展示.(一定不要忘了展示)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buMuchDialogBox= (Button) findViewById(R.id.bu_much_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//判断点击的事件
switch (view.getId()) {
//多选对话框
case R.id.bu_much_dialog_box:
//多选对话框方法
MuchMethod();
break;
}
}
//多选对话框方法
private void MuchMethod() {
//创建构造者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置属性
builder.setIcon(R.mipmap.ic_launcher_round).setTitle("请选择你的爱好");//.setMessage("内容区域");将内容转变成为多选对话框
//数据
final String[] s = {"足球", "篮球", "羽毛球", "跑步"};
//默认选择状态
final boolean[] bool = {true, false, false, false};
//设置多选对话框
builder.setMultiChoiceItems(s, bool, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i, boolean b) {
//改变选中状态
bool[i] = b;
for (int c = 0; c <= i; c++) {
if (bool[c]) {
Toast.makeText(MainActivity.this, "" + s[c], Toast.LENGTH_SHORT).show();
}
}
}
});
//确认取消监听
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "确认", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
//创建构造者对象
AlertDialog dialog = builder.create();
//展示到页面
dialog.show();
}
效果如下
四.水平对话框
1…首先在布局文件创建一个属性如下
<Button
android:id="@+id/bu_level_progress_bar_dialog_box"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#fff"
android:layout_marginLeft="30dp"
android:layout_marginTop="30dp"
android:layout_marginRight="30dp"
android:text="水平进度条对话框"
android:textSize="25dp"
android:onClick="onClick"
/>
2.初始化控件
3.创建进度对话框
设置属性(最大值进度)(展示方式:精准或模糊)
4.获取构造者并展示.(一定不要忘了展示)
5.接下来我们使用了计时器来完成(当然也可以使用别的休眠方式)
创建定时器对象
使用定时器对象准备计时重写TimerTask方法
这个时候用一个属性来保存进度值
每次隔几秒更新一下进度并更新进度
大于或等于最大进度时我们需要关闭计时器和弹框
计时器后面两个参数
第一个是多少秒后开始即使
第二个参数每次即使多少秒
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buLevelProgressBarDialogBox= (Button) findViewById(R.id.bu_level_progress_bar_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//判断点击的事件
switch (view.getId()) {
//水平对话框
case R.id.bu_level_progress_bar_dialog_box:
//水平对话框方法
LevelMethod();
break;
}
}
//水平进度对话框
private void LevelMethod() {
//创建进度对话框
final ProgressDialog progressDialog = new ProgressDialog(this);
//设置属性
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMax(100);
//展示
progressDialog.show();
//创建定时器对象
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int index = 0;
@Override
public void run() {
if (index >= 100) {
//取消计时器
timer.cancel();
//关闭弹框
progressDialog.dismiss();
}
//更新进度
progressDialog.setProgress(index += 20);
}
}, 0, 1000);
}
效果如下
五.圆形对话框
1…首先在布局文件创建一个属性如下
<Button
android:id="@+id/bu_round_progress_bar_dialog_box"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#fff"
android:layout_marginLeft="30dp"
android:layout_marginTop="30dp"
android:layout_marginRight="30dp"
android:text="圆形进度对话框"
android:textSize="25dp"
android:onClick="onClick"
/>
2.初始化控件
3.创建进度对话框
设置属性(最大值进度)(展示方式:精准或模糊)
4.获取构造者并展示.(一定不要忘了展示)
5.接下来我们使用了计时器来完成(当然也可以使用别的休眠方式)
创建定时器对象
使用定时器对象准备计时重写TimerTask方法
这个时候用一个属性来保存进度值
每次隔几秒更新一下进度(不要把展示出来)
大于或等于最大进度时我们需要关闭计时器和弹框
计时器后面两个参数
第一个是多少秒后开始即使
第二个参数每次即使多少秒
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buRoundProgressBarDialogBox= (Button) findViewById(R.id.bu_round_progress_bar_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//判断点击的事件
switch (view.getId()) {
//模糊对话框
case R.id.bu_round_progress_bar_dialog_box:
//模糊对话框方法
RoundMethod();
break;
}
}
private void RoundMethod() {
//创建进度条对话框
final ProgressDialog dialog = new ProgressDialog(MainActivity.this);
//设置属性
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMax(100);
dialog.setMessage("拼命加载中");
//展示
dialog.show();
//定义计时器
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
if (progress == 100) {
dialog.dismiss();
timer.cancel();
}
dialog.setProgress(progress += 20);
}
}, 0, 1000);
}
效果如下
六.日期对话框
1…首先在布局文件创建一个属性如下
<Button
android:id="@+id/bu_data_select_dialog_box"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#fff"
android:layout_marginLeft="30dp"
android:layout_marginTop="30dp"
android:layout_marginRight="30dp"
android:text="日期选择对话框"
android:textSize="25dp"
android:onClick="onClick"
/>
2.初始化控件
3.这里为什么要获取日历呢!
因为我们正常情况下都是先看当前日历
所以要获取日历对象用法很简单
calendar.get(Calendar.年) (这里的年使用英文来写可换成年,月,日,小时,分等等)4创建日期对象即DatePickerDialog(上下文,监听)
会自动生成重写onDateSet
四个参数
第一个用不到
第二个年
第三个月
第四个日
我们还要在监听最后面设置默认日期
使用日历来获取当前日期
第一个年
第二个月
第三个日
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buDataSelectDialogBox= (Button) findViewById(R.id.bu_data_select_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//日期点击的事件
switch (view.getId()) {
//日期对话框
case R.id.bu_data_select_dialog_box:
//日期对话框方法
DataMethod();
break;
}
}
//日期选择对话框
private void DataMethod() {
//创建日历
Calendar calendar = Calendar.getInstance();
//日期
new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
//修改之后
Toast.makeText(MainActivity.this, i + "-" + (i1 + 1) + "-" + i2, Toast.LENGTH_SHORT).show();
}
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_YEAR)).show();//默认选中状态一般使用日历来完成设置当前时间
}
效果如下
七.时间对话框
1…首先在布局文件创建一个属性如下
<Button
android:id="@+id/bu_time_select_dialog_box"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#fff"
android:layout_marginLeft="30dp"
android:layout_marginTop="30dp"
android:layout_marginRight="30dp"
android:text="时间选择对话框"
android:textSize="25dp"
android:onClick="onClick"
/>
2.初始化控件
3.这里为什么要获取日历呢!
因为我们正常情况下都是先看当前日历
所以要获取日历对象用法很简单
calendar.get(Calendar.年) (这里的年使用英文来写可换成年,月,日,小时,分等等)4创建日期对象即TimePickerDialog(上下文,监听)
会自动生成重写onTimeSet
四个参数
第一个用不到
第二个小时
第三个分
我们还要在监听最后面设置默认日期
使用日历来获取当前日期
第一个小时
第二个分
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buTimeSelectDialogBox= (Button) findViewById(R.id.bu_time_select_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//判断点击的事件
switch (view.getId()) {
//时间对话框
case R.id.bu_common_dialog_box:
//时间对话框方法
TimeMethod();
break;
}
}
//时间选择对话框
private void TimeMethod() {
//创建日历对象
Calendar calendar = Calendar.getInstance();
new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
Toast.makeText(MainActivity.this, "" + i + "." + i1, Toast.LENGTH_SHORT).show();//时,分,true有内圈 false无内圈
}
}, calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), false).show();
}
效果如下
八.自定义对话框
1…首先在布局文件创建一个属性如下
<Button
android:id="@+id/bu_custom3_dialog_box"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:text="自定义对话框2"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:textSize="25dp"
android:onClick="onClick"
/>
创建一个普通java类续成对话框(Dialog)并创建相对应的xml文件来放自己想要展示的数据
public class Custom3Dialog extends Dialog {
private TextView tvCustom;
private TextView tvMessage;
private Button buCustom3Tu;
private Button buCustom3Wu;
//可以自己输入修改一些属性内容
private String strtvCustom,strtvMessage,strbuCustom3Tu,strbuCustom3Wu;
public Custom3Dialog(@NonNull Context context) {
super(context);
}
//创建启动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom3);
tvCustom = (TextView) findViewById(R.id.tv_custom);
tvMessage = (TextView) findViewById(R.id.tv_message);
buCustom3Tu = (Button) findViewById(R.id.bu_custom3_tu);
buCustom3Wu = (Button) findViewById(R.id.bu_custom3_wu);
//修改属性内容的方法
updataUntrue();
//设置按钮监听
buCustom3Tu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//调用接口里的方法
buCustom3Tulentener.TuClick();
//关闭
dismiss();
}
});
buCustom3Wu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
buCustom3Wulentener.WuClick();
//关闭
dismiss();
}
});
tvCustom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
}
private void updataUntrue() {
if(strtvCustom!=null){
tvCustom.setText(strtvCustom);
}
if(strtvMessage!=null){
tvMessage.setText(strtvMessage);
}
if(strbuCustom3Tu!=null){
buCustom3Tu.setText(strbuCustom3Tu);
}
if(strbuCustom3Wu!=null){
buCustom3Wu.setText(strbuCustom3Wu);
}
}
//接口吐槽
public interface BuCustom3Tulentener{
void TuClick();
}
private BuCustom3Tulentener buCustom3Tulentener;
public BuCustom3Tulentener getBuCustom3Tulentener() {
return buCustom3Tulentener;
}
public void setBuCustom3Tulentener(BuCustom3Tulentener buCustom3Tulentener) {
this.buCustom3Tulentener = buCustom3Tulentener;
}
//
//接口五星
public interface BuCustom3Wulentener{
void WuClick();
}
private BuCustom3Wulentener buCustom3Wulentener;
public BuCustom3Wulentener getBuCustom3Wulentener() {
return buCustom3Wulentener;
}
public void setBuCustom3Wulentener(BuCustom3Wulentener buCustom3Wulentener) {
this.buCustom3Wulentener = buCustom3Wulentener;
}
//
//关闭
//set get
public String getStrtvCustom() {
return strtvCustom;
}
public void setStrtvCustom(String strtvCustom) {
this.strtvCustom = strtvCustom;
}
public String getStrtvMessage() {
return strtvMessage;
}
public void setStrtvMessage(String strtvMessage) {
this.strtvMessage = strtvMessage;
}
public String getStrbuCustom3Tu() {
return strbuCustom3Tu;
}
public void setStrbuCustom3Tu(String strbuCustom3Tu) {
this.strbuCustom3Tu = strbuCustom3Tu;
}
public String getStrbuCustom3Wu() {
return strbuCustom3Wu;
}
public void setStrbuCustom3Wu(String strbuCustom3Wu) {
this.strbuCustom3Wu = strbuCustom3Wu;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
buCustom3DialogBox = (Button) findViewById(R.id.bu_custom3_dialog_box);
}
//触发点击事件
public void onClick(View view) {
//判断点击的事件
switch (view.getId()) {
//普通对话框
case R.id.bu_custom3_dialog_box:
//普通对话框方法
custom3Method();
break;
}
}
//自定义对话框方法精良版
private void custom3Method() {
//创建自定义类对象
Custom3Dialog custom3Dialog = new Custom3Dialog(this);
//改变内容想要改变则填入想填入的内容
/* custom3Dialog.setStrtvCustom("");
custom3Dialog.setStrtvMessage("");
custom3Dialog.setStrbuCustom3Tu("");
custom3Dialog.setStrbuCustom3Wu("");
*/
//创建对应的监听
custom3Dialog.setBuCustom3Tulentener(new Custom3Dialog.BuCustom3Tulentener() {
@Override
public void TuClick() {
Toast.makeText(MainActivity.this, "请求你不要吐槽", Toast.LENGTH_SHORT).show();
}
});
custom3Dialog.setBuCustom3Wulentener(new Custom3Dialog.BuCustom3Wulentener() {
@Override
public void WuClick() {
Toast.makeText(MainActivity.this, "谢谢您的五星好评", Toast.LENGTH_SHORT).show();
}
});
//展示
custom3Dialog.show();
}
效果如下