美文网首页
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