安卓6种Dialog弹窗的使用 您所在的位置:网站首页 为什么安卓手机没有弹窗功能 安卓6种Dialog弹窗的使用

安卓6种Dialog弹窗的使用

2024-07-16 06:06| 来源: 网络整理| 查看: 265

样式一:简单对话框

在这里插入图片描述

button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 通过AlertDialog.Builder这个类来实例化我们的一个AlertDialog的对象 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // 设置Title的图标 builder.setIcon(R.drawable.ic_launcher); // 设置Title的内容 builder.setTitle("弹出警告框"); // 设置Content来显示一个信息 builder.setMessage("确定删除吗?"); // 设置一个PositiveButton builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "positive: " + which, Toast.LENGTH_SHORT).show(); } }); // 设置一个NegativeButton builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show(); } }); // 设置一个NeutralButton builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "neutral: " + which, Toast.LENGTH_SHORT).show(); } }); // 显示出该对话框 builder.show(); } });

which表示的是action button所代表的int值,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮。

样式二:列表对话框

在这里插入图片描述

button2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("选择一个城市"); // 指定下拉列表的显示数据 final String[] cities = {"广州", "上海", "北京", "香港", "澳门"}; // 设置一个下拉的列表选择项 builder.setItems(cities, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "选择的城市为:" + cities[which], Toast.LENGTH_SHORT).show(); } }); builder.show(); } });

当选中一个选项时,对话框就会消失掉。这里的which代表的是下拉列表的每个选项的索引,通过这个我们可以轻松得到用户选中的是哪一个选项。

样式三:单选对话框

在这里插入图片描述

button3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请选择性别"); final String[] sex = {"男", "女", "未知性别"}; // 设置一个单项选择下拉框 /** * 第一个参数指定我们要显示的一组下拉单选框的数据集合 * 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上 * 第三个参数给每一个单选项绑定一个监听器 */ builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show(); } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show(); } });

在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失。

样式四:复选对话框

在这里插入图片描述

button4.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("爱好"); final String[] hobbies = {"篮球", "足球", "网球", "斯诺克"}; final boolean checkedItems[] = {true, false, true, false}; // 设置一个单项选择下拉框 /** * 第一个参数指定我们要显示的一组下拉多选框的数据集合 * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择, * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true}; * 第三个参数给每一个多选项绑定一个监听器 */ builder.setMultiChoiceItems(hobbies, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { StringBuffer sb = new StringBuffer(100); @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { if(isChecked) { sb.append(hobbies[which] + ", "); } Toast.makeText(MainActivity.this, "爱好为:" + sb.toString(), Toast.LENGTH_SHORT).show(); } }); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show(); } });

同样,对于下拉多选框,当我们选中其中一个选项时,对话框是不会消失的,只有点击了action button才会消失。

样式五:内容部分自定义的对话框

在这里插入图片描述

button5.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请输入用户名和密码"); // 通过LayoutInflater来加载一个xml的布局文件作为一个View对象 View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); // 设置我们自己定义的布局文件作为弹出框的Content builder.setView(view); final EditText username = (EditText)view.findViewById(R.id.username); final EditText password = (EditText)view.findViewById(R.id.password); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String a = username.getText().toString().trim(); String b = password.getText().toString().trim(); // 将输入的用户名和密码打印出来 Toast.makeText(MainActivity.this, "用户名: " + a + ", 密码: " + b, Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show(); } }); 样式六:完全自定义的对话框

1,首先我们需要自定义Dialog的style,让他自己本有的东西全部透明,然后在设置我们自己的内容就可以达到完全自定义的效果了

@android:color/transparent @null true true false @null @style/normalDialogAnim true @anim/normal_dialog_enter @anim/normal_dialog_exit

进入动画:

离开动画:

2,接下来就可以为对话框设置我们自定义的style了

/** * 自定义对话框 */ private void customDialog() { final Dialog dialog = new Dialog(this, R.style.NormalDialogStyle); View view = View.inflate(this, R.layout.dialog_normal, null); TextView cancel = (TextView) view.findViewById(R.id.cancel); TextView confirm = (TextView) view.findViewById(R.id.confirm); // 设置自定义的布局 dialog.setContentView(view); //使得点击对话框外部不消失对话框 dialog.setCanceledOnTouchOutside(true); //设置对话框的大小 view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f)); Window dialogWindow = dialog.getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f); lp.height = WindowManager.LayoutParams.WRAP_CONTENT; lp.gravity = Gravity.CENTER; dialogWindow.setAttributes(lp); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); confirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); dialog.show(); }

将Dialog放置在屏幕中间lp.gravity = Gravity.CENTER;并设置他的宽度为屏幕的75%lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.75f); 3,这里使用到了一个工具类用来计算手机屏幕的宽高,如下代码:

public class ScreenSizeUtils { private static ScreenSizeUtils instance = null; private int screenWidth, screenHeight; public static ScreenSizeUtils getInstance(Context mContext) { if (instance == null) { synchronized (ScreenSizeUtils.class) { if (instance == null) instance = new ScreenSizeUtils(mContext); } } return instance; } private ScreenSizeUtils(Context mContext) { WindowManager manager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(dm); screenWidth = dm.widthPixels;// 获取屏幕分辨率宽度 screenHeight = dm.heightPixels;// 获取屏幕分辨率高度 } //获取屏幕宽度 public int getScreenWidth() { return screenWidth; } //获取屏幕高度 public int getScreenHeight() { return screenHeight; } } 自定义对话框实例:

在这里插入图片描述 1,先来码这个对话框的布局,dialog_bottom.xml里面就放置了三个按钮:

2,接下来就可以为我们的对话框加载这个布局了

Dialog dialog = new Dialog(this, R.style.NormalDialogStyle); View view = View.inflate(this, R.layout.dialog_bottom, null); dialog.setContentView(view); dialog.setCanceledOnTouchOutside(true); view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(this).getScreenHeight() * 0.23f)); Window dialogWindow = dialog.getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f); lp.height = WindowManager.LayoutParams.WRAP_CONTENT; lp.gravity = Gravity.BOTTOM; dialogWindow.setAttributes(lp); dialog.show();

上面这一段带代码的关键就是将Dialog放置在屏幕底部lp.gravity = Gravity.BOTTOM;并设置他的宽度为屏幕的90%lp.width = (int) (ScreenSizeUtils.getInstance(this).getScreenWidth() * 0.9f);



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有