Android开发Android进阶之路Android技术知识

PopupWindow的使用及相关问题汇总

2019-08-16  本文已影响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),辛苦搬砖之余用闲余时间动动手指,就可以日赚数百元

上一篇下一篇

猜你喜欢

热点阅读