popwindow 焦点问题,物理返回键截获,软键盘监听问题
首先是setFocusable这个方法,获取焦点;如果不获取焦点,那么popwindow中的控件都没有办法获取焦点和事件响应问题。
如果获取焦点,那么popwindow就会拦截屏幕上的点击触摸事件以及物理键等。那么只有当popwindow消失,那么popwindow下面的页面才会响应事件。
当然也可以做到popwindow获取事件响应也可以让popwindow以外的区域也可以获取,那就是设置setBackgroundDrawable(new BitmapDrawable())。但是这样会造就只要触摸到popwindow以外区域popwindow就会消失。说白了setBackgroundDrawable(new BitmapDrawable())其实似的popwindow消失而是其他页面获取焦点。
设置了setBackgroundDrawable(new BitmapDrawable()),那么强制性的(当焦点在popwindow以外)消失popwindow,那么
this.setOutsideTouchable(false);
就会无效,那么popwindow,你想让其在触摸popwindow以外区域不消失,都失效。
总之:setBackgroundDrawable(new BitmapDrawable()) 这个方法会强制性的将popwindow在 事件在popwindow区域以外的时候消失。但是有的时候,setFocusable 无效。如响应物理返回键,所以有的时候必须添加setBackgroundDrawable(new BitmapDrawable()) 来响应物理返回键。
那么setFocusable 让popwindow获取焦点,如何自己处理物理返回键呢?
只能从软键盘的弹出隐藏做监听:
public class SoftInputListener {private static boolean sLastVisiable = true; private SoftInputListenerCallback back; public SoftInputListener(Activity activity , SoftInputListenerCallback callback){back = callback; addOnSoftKeyBoardVisibleListener(activity); }/**监听软键盘状态 * @param activity * @param */ public void addOnSoftKeyBoardVisibleListener(Activity activity){final View decorView = activity.getWindow().getDecorView(); decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Override public void onGlobalLayout() {Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); int displayHight = rect.bottom - rect.top; int hight = decorView.getHeight(); boolean visible = (double) displayHight / hight < 0.8; if(visible != sLastVisiable){back.onSoftKeyBoardVisible(visible); }sLastVisiable = visible; }}); }public interface SoftInputListenerCallback{abstract void onSoftKeyBoardVisible(boolean visible); }
在activity中调用:
new SoftInputListener(this, new SoftInputListener.SoftInputListenerCallback(){@Override public void onSoftKeyBoardVisible(boolean visible) {if(!visible){if(CommentCons.mInputPopdw != null &&CommentCons.mInputPopdw.isShowing()){CommentCons.mInputPopdw.dismiss(); }}} });
通过手动关闭软键盘:
public void closeSoftInput() {Activity activity = (Activity) mContext; if(activity.getWindow().getAttributes().softInputMode ==WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE){InputMethodManager inputMethodManager=(InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(mEditInput.getWindowToken(),0); } }
manifest文件 必须添加:
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" > stateAlwaysHidden不可缺少
popwindow 焦点问题,物理返回键截获,软键盘监听问题相关推荐
- android 软键盘监听、隐藏、显示、点击空白处隐藏和Android KEYCODE 键值大全
android 软键盘监听.隐藏.显示.点击空白处隐藏. textView.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boo ...
- vant 软键盘_移动端软键盘监听(弹出,收起),及影响定位布局的问题
移动端软键盘监听(弹出,收起),及影响定位布局的问题 一:移动端软键盘监听(弹出,收起) 1.监听resize ( Android) var winHeight = $(window).height( ...
- 安卓之软键盘监听与切换软键盘状态和重新获取EditText焦点
最近在工作中的时候遇到了关于使用ScrollView作为外层点击内部EditText弹出软键盘滑动页面的问题,百度了好久各种教程,但是对于我的页面来说没有一个有用的,自己花了1天时间终于搞定了,今天在 ...
- 三星手机上,setOnEditorActionListener软键盘监听回车无效,解决方案
监听软键盘事件的keyCode的三种方法经测试 在三星S4以及I9158上无效.目测其他三星也无效用下面这种方法,监听Edittext的文本改变. editext.addTextChangedList ...
- VUE 物理返回键的处理
H5退出时所遇到的问题: 1.按返回键或anroid手机的物理返回键时,都不走destroy方法. 2.按物理返回键,添加popstate监听时, (1)历史记录要准确,否则会执行多次监听方法 (2) ...
- android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){ ...
- 通过手机物理返回键实现弹出层的隐藏
通过手机物理返回键实现弹出层的隐藏 <template><div class="popup"><h1 @click="popup" ...
- JavaScript监听手机物理返回键的两种解决方法
JavaScript监听手机物理返回键的两种解决方法 参考文章: (1)JavaScript监听手机物理返回键的两种解决方法 (2)https://www.cnblogs.com/xzzzys/p/8 ...
- unity调用安卓手机物理返回键和home键
使用unity制作游戏时,有时候需要在游戏中触发手机的物理返回键和home键,下面在update方法中每帧监听是否按下了该键,然后写入自己要调用的方法 using System.Collections ...
最新文章
- 二、 elasticsearch安装和概念
- 小姐姐为你解析马爸爸是怎么用大数据“宰你”的
- php factory interface,PHP设计模式之工厂方法*解读
- Python 绘制散点图
- ​特征工程系列:特征预处理(上)
- 不要运行explorer_在Internet Explorer浏览器上运行测试
- Ansible入门使用
- Ruby on Rails 目录结构
- 版本控制工具——Git常用操作(上)
- 串口转usb驱动c语言程序,电脑中USB转串口如何正确安装对应的驱动程序
- 将文件按照文件名分类到文件夹
- 模指数运算之python实现
- 百度地图坐标系统解析
- 【LeetCode - 317】离建筑物最近的距离
- 迷你星域冒险服务器维护中,迷你世界星域冒险攻略 星域冒险快速通关技巧[多图]...
- DFS基础-----刷题合集--1(全排列,八皇后,迷宫),让你明白DFS的基础用法
- 【物联网毕设基础】单片机:NEC 协议红外遥控器
- 拼题A 7-7 计算存款利息
- 51单片机波形发生器51c语言,51单片机实现波形发生器.doc
- 【netron】模型可视化工具netron
热门文章
- ubuntu下sublime如何一次只打開一個文件
- ubuntu16.04下面用sublime运行scala代码
- 浙江省经信委与新华三签署战略合作协议
- Node.js与Sails~Model和ORM的持久化
- lvs增加并发连接,解决因为哈希表过小导致软中断过高问题
- 计算机网络技术中的数据通信
- ubuntu ???????????? no permissions 问题解决
- 并发用户数的计算公式
- CentOS6.2下使用Nokia E72i成功发送短信
- 关于runjs的一些想法