安卓6种Dialog弹窗的使用

样式一:简单对话框

在这里插入图片描述

button.setOnClickListener(new OnClickListener(){@Overridepublic 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("确定删除吗?");//    设置一个PositiveButtonbuilder.setPositiveButton("确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){Toast.makeText(MainActivity.this, "positive: " + which, Toast.LENGTH_SHORT).show();}});//    设置一个NegativeButtonbuilder.setNegativeButton("取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){Toast.makeText(MainActivity.this, "negative: " + which, Toast.LENGTH_SHORT).show();}});//    设置一个NeutralButtonbuilder.setNeutralButton("忽略", new DialogInterface.OnClickListener(){@Overridepublic 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(){@Overridepublic 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(){@Overridepublic void onClick(DialogInterface dialog, int which){Toast.makeText(MainActivity.this, "选择的城市为:" + cities[which], Toast.LENGTH_SHORT).show();}});builder.show();}});

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

样式三:单选对话框

在这里插入图片描述

button3.setOnClickListener(new OnClickListener(){@Overridepublic 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(){@Overridepublic void onClick(DialogInterface dialog, int which){Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();}});builder.setPositiveButton("确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){}});builder.show();}});

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

样式四:复选对话框

在这里插入图片描述

button4.setOnClickListener(new OnClickListener(){@Overridepublic 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);@Overridepublic 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(){@Overridepublic void onClick(DialogInterface dialog, int which){}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){}});builder.show();}});

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

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

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><EditText android:id="@+id/username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="username"/><EditTextandroid:id="@+id/password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/username"android:hint="password"android:inputType="textPassword"/></RelativeLayout>
button5.setOnClickListener(new OnClickListener(){@Overridepublic 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);//    设置我们自己定义的布局文件作为弹出框的Contentbuilder.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(){@Overridepublic 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(){@Overridepublic void onClick(DialogInterface dialog, int which){}});builder.show();}});

样式六:完全自定义的对话框

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

<!--对话框的样式--><style name="NormalDialogStyle"><!--对话框背景 --><item name="android:windowBackground">@android:color/transparent</item><!--边框 --><item name="android:windowFrame">@null</item><!--没有标题 --><item name="android:windowNoTitle">true</item><!-- 是否浮现在Activity之上 --><item name="android:windowIsFloating">true</item><!--背景透明 --><item name="android:windowIsTranslucent">false</item><!-- 是否有覆盖 --><item name="android:windowContentOverlay">@null</item><!--进出的显示动画 --><item name="android:windowAnimationStyle">@style/normalDialogAnim</item><!--背景变暗--><item name="android:backgroundDimEnabled">true</item></style><!--对话框动画--><style name="normalDialogAnim" parent="android:Animation"><item name="@android:windowEnterAnimation">@anim/normal_dialog_enter</item><item name="@android:windowExitAnimation">@anim/normal_dialog_exit</item></style>

进入动画:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="100%"android:toYDelta="0"android:fillAfter="false"android:duration="300"/></set>

离开动画:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromYDelta="0"android:toYDelta="100%"android:fillAfter="false"android:duration="300"   /></set>

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() {@Overridepublic void onClick(View v) {dialog.dismiss();}});confirm.setOnClickListener(new View.OnClickListener() {@Overridepublic 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里面就放置了三个按钮:

<?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:background="@android:color/transparent"android:orientation="vertical"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/round_corner"android:text="拍照" /><TextViewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="#ddd" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/round_corner"android:text="相册" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:background="@drawable/round_corner"android:text="取消" /><Viewandroid:layout_width="match_parent"android:layout_height="15dp" />
</LinearLayout>

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);


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部