美文网首页
Android AlertDialog使用总结

Android AlertDialog使用总结

作者: 惟吾德馨_慧 | 来源:发表于2019-06-28 10:35 被阅读0次

1.AlertDialog初始化

       AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DialogTheme);
        dialog = builder.create();
        dialog.show();

2.设置AlertDialog的高宽、位置

       Window window = dialog.getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setAttributes(params);
        window.setGravity(Gravity.TOP); //设置在界面的最上边
        //避免AlertDialog的输入框不能弹出键盘
        window.clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

//        window.setWindowAnimations(R.style.AnimationUpPopup);//设置弹出的动画效果

3.AlertDialog设置沉浸式

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
            window.setNavigationBarColor(Color.TRANSPARENT);
        }

4.AlertDialog和PopupWindow的区别

(1)Popupwindow在显示之前一定要设置宽高,Dialog无此限制。
(2)Popupwindow默认不会响应物理键盘的back,除非显示设置了popup.setFocusable(true);而在点击back的时候,Dialog会消失。
(3)Popupwindow不会给页面其他的部分添加蒙层,而Dialog会。
(4)Popupwindow没有标题,Dialog默认有标题,可以通过dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消标题
(5)二者显示的时候都要设置Gravity。如果不设置,Dialog默认是Gravity.CENTER。
(6)二者都有默认的背景,都可以通过setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。

其中最本质的差别就是:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。
这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。我们在写程序的过程中可以根据自己的需要选择使用Popupwindow或者是Dialog。

作者:android_cmos 原文:https://blog.csdn.net/android_cmos/article/details/51223776

5.使用dialog遇到的bug:

1、Activity页面闪退时,已显示的dialog失去宿主Activitiy而出现is your Activity的提示,解决办法:
需要判断该Acitivity是否被回收或正在退出:activity.isFinishing()

if (activity.isFinishing())  return;  //如果Acitivity退出了,则不显示dialog或向下执行dialog的相关操作

每天进步一点点。。。(2019-06-28)

相关文章

网友评论

      本文标题:Android AlertDialog使用总结

      本文链接:https://www.haomeiwen.com/subject/sntscctx.html