PopupWindow的使用及相关问题汇总

作者: 手指乐 | 来源:发表于2019-08-16 09:59 被阅读8次

    基本使用

    1.定义布局xml
    2.初始化

    selDlg = new PopupWindow(popRootView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    selDlg.setFocusable(true);
    selDlg.setOutsideTouchable(true);
    

    3.显示:

    selDlg.showAtLocation(v, Gravity.BOTTOM, 0, 0);
    

    常见问题:

    1.在activity的onCreate方法中显示popUpWindow出现异常
    onCreate()中直接添加show popUpWindow的逻辑会导致应用crush掉(onStart的情况同onCreate)。因为在onCreate(),onStart()等activity生命周期函数中,Activity的相关资源还没有完全加载完成,我们知道,popUpWindow是要依靠activity存在的,这个时候activity没有加载完成,所以会导致popUpWindow显示异常
    如果要在activity启动时弹出popupwindow,应该在onWindowFocusChanged中弹出,Activity生命周期中,onStart, onResume, onCreate都不是真正visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时。
    2.popupwindow如果不在布局中或代码设置背景色,默认背景是透明的,就是popupwindow没有内容的地方是透明的,会显示底下activity的内容
    3.popupwindow构造函数最后一个参数意思是是否能获取焦点,如果设置为false,焦点不会设置在popupwindow上,这样点击外部popupwindow不会消失,按返回键时,activity带着popupwindow一起消失,设置为true,就有了焦点,点击外部,popupwindow消失,按返回键,只退出popupwindow
    4.popupwindow要在activity退出前dismiss掉,不然会内存泄漏(在new的时候,最后一个参数(是否获取焦点)设置为true,则按back键时,popupwindow会自动执行dismiss,按一次的时候,只退出popupwindow(跟alertdialog一样),设置为false,则按一次直接推出activity,并且不会自动执行dismiss)
    5.没有设置背景色也没有内容的区域是透明的,比如以下布局除了textview里的文字,其他地方都是透明的:

    <?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"
        >
    
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="合计一元人民币"
                android:textColor="#ffffff"
                android:textSize="15sp"
                />
    </RelativeLayout>
    

    以下布局全部是透明的,因为edittext没有任何内容:

    <?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:layout_width="200dp"
                android:layout_height="200dp" />
    </RelativeLayout>
    

    6.popupwindow弹出时,后面的activity透明度不会变化,如果要变化,可以调用这个方法:

    protected void setAlpha(float fAlpha){
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.alpha = fAlpha;//设置window的透明度(0-1),0代表完全透明,1代表完全不透明
        getWindow().setAttributes(params);
    
    }
    
    

    手机赚钱怎么赚,给大家推荐一个手机赚钱APP汇总平台:手指乐(http://www.szhile.com?from=js),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元

    相关文章

      网友评论

        本文标题:PopupWindow的使用及相关问题汇总

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