Android popwindow 点击消失问题

时间:2021-02-09 10:45:57
Android popwindow 问题:现在点击右上角菜单键和手机物理菜单键都会弹出popwindow,也设置了点击其他部分popwindow会消失,现在想实现点击右上角菜单键时若popwindow未展示就展示,若正在展示的话就消失掉,但是按下右上角菜单键(不抬起)时popwindow会消失(体现了点击其他部分popwindow会消失的事件),手指抬起来时popwindow又弹了出来。没有实现想要的功能,怎么搞呢?大家有没有遇到过同样的问题?谢谢。

12 个解决方案

#1


popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);

#2


popup好像有个isShowing()方法,返回true和false,去判断popup是否显示就可以了。

#3


有一个设置点击别处不消失的属性。。。。

#4


引用 1 楼 u012390044 的回复:
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
现在就是这样设置的,但是在popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉

#5


引用 2 楼 u012301841 的回复:
popup好像有个isShowing()方法,返回true和false,去判断popup是否显示就可以了。
现在已经判断了,但是popupWindow.setOutsideTouchable(true);监听的是手指按下的动作,为按钮设置的点击事件是手指抬起的动作触发,导致popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉

#6


引用 3 楼 u013280307 的回复:
有一个设置点击别处不消失的属性。。。。
那点击别的地方(除了popwindow本身)就不会消失了 啊

#7


引用 4 楼 u014071669 的回复:
Quote: 引用 1 楼 u012390044 的回复:

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
现在就是这样设置的,但是在popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉


根据你描述的情况,你应该是每次都new出一个新的popup,你把popup写成单例模式试试。

#8


引用 1 楼 u012390044 的回复:
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
不好意思,上一条回的有误,我原先有popupWindow.setFocusable(true);这一句的,但是后来我想实现点击物理菜单键时popwindow出现,再次点击popwindow消失的功能时发现,当popwindow弹出并获取焦点后,再点击物理菜单键不会消失。加上popupWindow.setFocusable(true)之后,

#9


引用 7 楼 u012301841 的回复:
Quote: 引用 4 楼 u014071669 的回复:

Quote: 引用 1 楼 u012390044 的回复:

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
现在就是这样设置的,但是在popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉


根据你描述的情况,你应该是每次都new出一个新的popup,你把popup写成单例模式试试。
用的是同一个对象啊

#10


在你点击弹出popowinddow的view上添加点击事件view.setOnClick(false), 然后在popwind初始化后设置popupwindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
view.setClickable(true);
}
}, 100);
}
});,这样可以解决你的问题!

#11


感谢qq_21724641,qq_21724641的方法可行

#12


由于PopupView本身并没有重写Key和Touch事件的处理,所以如果没有包这个外层容器类,点击Back键或者外部区域是不会导致弹框消失的。设置了PopupWindow的background,点击Back键或者点击弹窗的外部区域,弹窗就会dismiss.

至于第二次点击如果显示就让他消失,可以这样:给PopupView设置一个监听器,如下
popupWindow.setTouchInterceptor(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        return false;
                    }
                });
在onTouch()里面进行判断,如果是第二次点击,就让他消失,不再显示。

不知道思路对不对,供参考

#1


popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);

#2


popup好像有个isShowing()方法,返回true和false,去判断popup是否显示就可以了。

#3


有一个设置点击别处不消失的属性。。。。

#4


引用 1 楼 u012390044 的回复:
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
现在就是这样设置的,但是在popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉

#5


引用 2 楼 u012301841 的回复:
popup好像有个isShowing()方法,返回true和false,去判断popup是否显示就可以了。
现在已经判断了,但是popupWindow.setOutsideTouchable(true);监听的是手指按下的动作,为按钮设置的点击事件是手指抬起的动作触发,导致popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉

#6


引用 3 楼 u013280307 的回复:
有一个设置点击别处不消失的属性。。。。
那点击别的地方(除了popwindow本身)就不会消失了 啊

#7


引用 4 楼 u014071669 的回复:
Quote: 引用 1 楼 u012390044 的回复:

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
现在就是这样设置的,但是在popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉


根据你描述的情况,你应该是每次都new出一个新的popup,你把popup写成单例模式试试。

#8


引用 1 楼 u012390044 的回复:
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
不好意思,上一条回的有误,我原先有popupWindow.setFocusable(true);这一句的,但是后来我想实现点击物理菜单键时popwindow出现,再次点击popwindow消失的功能时发现,当popwindow弹出并获取焦点后,再点击物理菜单键不会消失。加上popupWindow.setFocusable(true)之后,

#9


引用 7 楼 u012301841 的回复:
Quote: 引用 4 楼 u014071669 的回复:

Quote: 引用 1 楼 u012390044 的回复:

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
现在就是这样设置的,但是在popwindow弹出的情况下点击右上角菜单键,popwindow会先消失,再出现,在这种情况下我想要的是只消失掉


根据你描述的情况,你应该是每次都new出一个新的popup,你把popup写成单例模式试试。
用的是同一个对象啊

#10


在你点击弹出popowinddow的view上添加点击事件view.setOnClick(false), 然后在popwind初始化后设置popupwindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
view.setClickable(true);
}
}, 100);
}
});,这样可以解决你的问题!

#11


感谢qq_21724641,qq_21724641的方法可行

#12


由于PopupView本身并没有重写Key和Touch事件的处理,所以如果没有包这个外层容器类,点击Back键或者外部区域是不会导致弹框消失的。设置了PopupWindow的background,点击Back键或者点击弹窗的外部区域,弹窗就会dismiss.

至于第二次点击如果显示就让他消失,可以这样:给PopupView设置一个监听器,如下
popupWindow.setTouchInterceptor(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        return false;
                    }
                });
在onTouch()里面进行判断,如果是第二次点击,就让他消失,不再显示。

不知道思路对不对,供参考