首先是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 焦点问题,物理返回键截获,软键盘监听问题相关推荐

  1. android 软键盘监听、隐藏、显示、点击空白处隐藏和Android KEYCODE 键值大全

    android 软键盘监听.隐藏.显示.点击空白处隐藏. textView.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boo ...

  2. vant 软键盘_移动端软键盘监听(弹出,收起),及影响定位布局的问题

    移动端软键盘监听(弹出,收起),及影响定位布局的问题 一:移动端软键盘监听(弹出,收起) 1.监听resize ( Android) var winHeight = $(window).height( ...

  3. 安卓之软键盘监听与切换软键盘状态和重新获取EditText焦点

    最近在工作中的时候遇到了关于使用ScrollView作为外层点击内部EditText弹出软键盘滑动页面的问题,百度了好久各种教程,但是对于我的页面来说没有一个有用的,自己花了1天时间终于搞定了,今天在 ...

  4. 三星手机上,setOnEditorActionListener软键盘监听回车无效,解决方案

    监听软键盘事件的keyCode的三种方法经测试 在三星S4以及I9158上无效.目测其他三星也无效用下面这种方法,监听Edittext的文本改变. editext.addTextChangedList ...

  5. VUE 物理返回键的处理

    H5退出时所遇到的问题: 1.按返回键或anroid手机的物理返回键时,都不走destroy方法. 2.按物理返回键,添加popstate监听时, (1)历史记录要准确,否则会执行多次监听方法 (2) ...

  6. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键

    本文将带你了解Android应用开发之react-native 监听Android物理返回键,希望本文对大家学Android有所帮助. 1. componentWillMount(){         ...

  7. 通过手机物理返回键实现弹出层的隐藏

    通过手机物理返回键实现弹出层的隐藏 <template><div class="popup"><h1 @click="popup" ...

  8. JavaScript监听手机物理返回键的两种解决方法

    JavaScript监听手机物理返回键的两种解决方法 参考文章: (1)JavaScript监听手机物理返回键的两种解决方法 (2)https://www.cnblogs.com/xzzzys/p/8 ...

  9. unity调用安卓手机物理返回键和home键

    使用unity制作游戏时,有时候需要在游戏中触发手机的物理返回键和home键,下面在update方法中每帧监听是否按下了该键,然后写入自己要调用的方法 using System.Collections ...

最新文章

  1. 二、 elasticsearch安装和概念
  2. 小姐姐为你解析马爸爸是怎么用大数据“宰你”的
  3. php factory interface,PHP设计模式之工厂方法*解读
  4. Python 绘制散点图
  5. ​特征工程系列:特征预处理(上)
  6. 不要运行explorer_在Internet Explorer浏览器上运行测试
  7. Ansible入门使用
  8. Ruby on Rails 目录结构
  9. 版本控制工具——Git常用操作(上)
  10. 串口转usb驱动c语言程序,电脑中USB转串口如何正确安装对应的驱动程序
  11. 将文件按照文件名分类到文件夹
  12. 模指数运算之python实现
  13. 百度地图坐标系统解析
  14. 【LeetCode - 317】离建筑物最近的距离
  15. 迷你星域冒险服务器维护中,迷你世界星域冒险攻略 星域冒险快速通关技巧[多图]...
  16. DFS基础-----刷题合集--1(全排列,八皇后,迷宫),让你明白DFS的基础用法
  17. 【物联网毕设基础】单片机:NEC 协议红外遥控器
  18. 拼题A 7-7 计算存款利息
  19. 51单片机波形发生器51c语言,51单片机实现波形发生器.doc
  20. 【netron】模型可视化工具netron

热门文章

  1. ubuntu下sublime如何一次只打開一個文件
  2. ubuntu16.04下面用sublime运行scala代码
  3. 浙江省经信委与新华三签署战略合作协议
  4. Node.js与Sails~Model和ORM的持久化
  5. lvs增加并发连接,解决因为哈希表过小导致软中断过高问题
  6. 计算机网络技术中的数据通信
  7. ubuntu ???????????? no permissions 问题解决
  8. 并发用户数的计算公式
  9. CentOS6.2下使用Nokia E72i成功发送短信
  10. 关于runjs的一些想法