需求:

现在有一个需求是点击一行文本框,弹出一个之前隐藏的输入框,输入完成后按返回键或者其他的东西隐藏键盘和输入框,将输入框的内容填充到文本框中。

实现:

拿到这个需求的第一反应就是写一个监听来监听键盘的显示和隐藏来控制输入框的显示和隐藏,控制文本框中的内容。

所以我做了如下操作:

指定android:windowSoftInputMode="adjustResize|stateAlwaysHidden"

这个的做法是为了让键盘弹出时改变布局。

让Activity实现LayoutchangeListener,监听布局的改变,当布局发生的改变为屏幕的1/3

时我们认为是键盘导致的。

@Override

public void onLayoutChange(View v, int left, int top, int right,

int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {

//old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值

//现在认为只要控件将Activity向上推的高度超过了1/3屏幕高,就认为软键盘弹起

if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){

Toast.makeText(MainActivity.this, "监听到软键盘弹起...", Toast.LENGTH_SHORT).show();

}else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){

Toast.makeText(MainActivity.this, "监听到软件盘关闭...", Toast.LENGTH_SHORT).show();

}

}

问题:

没错,这样确实是能够做到监听软键盘的弹出和隐藏,这一切都是因为之前设置了indowSoftInputMode=adjustResize,但是当全屏模式下是这个属性是无效的,键盘弹出和隐藏并不会触发onLayouChangeListener。

而项目中使用了SystemBarTintManager之后,Activity就变成了全屏模式

所以我做了如下操作

//contentlayout是最外层布局

mChildOfContent = contentlayout.getChildAt(0);

mChildOfContent.getViewTreeObserver()

.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

public void onGlobalLayout() {

possiblyResizeChildOfContent();

}});

private void possiblyResizeChildOfContent() {

int usableHeightNow = computeUsableHeight();

if (usableHeightNow != usableHeightPrevious) {

int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();

int heightDifference = usableHeightSansKeyboard - usableHeightNow;

if (heightDifference > (usableHeightSansKeyboard / 4)) {

// 键盘弹出

} else {

// 键盘收起

productInfo.setVisibility(View.GONE);

productInfoEnd.setText(productInfo.getText().toString());

}

mChildOfContent.requestLayout();

usableHeightPrevious = usableHeightNow;

}

}

private int computeUsableHeight() {

Rect r = new Rect();

mChildOfContent.getWindowVisibleDisplayFrame(r);

return (r.bottom - r.top);}

android 键盘隐藏监听,安卓监听软键盘弹出与隐藏的两种方法相关推荐

  1. android inputmethodmanager 不自动弹出,Android中软键盘InputMethodManager的弹出和隐藏,以及显示和隐藏的监听...

    1.首先设置软键盘的弹出模式,设置在初始化View的前面 @Override protected void onCreate(Bundle savedInstanceState) { this.req ...

  2. android中监听软键盘的弹出与隐藏,并获取软键盘的高度

    最近项目中有一个需求上弹出软键盘的时候,输入框位移至输入框上方,但是Activity中其他的VIew都不动.这个需求需要监听软软键盘的弹出与隐藏,并获取键盘的高度.上网找了一下发现,Android竟然 ...

  3. android 键盘弹出 监听,奇技淫巧之-Android监听键盘弹出与隐藏事件

    CaptainAndroid.png 相信看到这个标题,大家都会潜意识觉得:Activity中没有可以复写的方法么?或者说,没有什么listener可以让我们使用么? 抱歉,真的没有,我们潜意识都是以 ...

  4. Swift--监听iPhone键盘弹出及隐藏事件

    开发需求:对键盘弹出及隐藏事件进行监听 需要通过NotificationCenter对键盘事件进行监听 //键盘即将弹出NotificationCenter.default.addObserver(s ...

  5. 声卡突然听不到监听_电脑突然听不到声音怎么办?介绍两种方法

    电脑突然听不到声音怎么办?介绍两种方法 发布时间:2017-04-12 23:32 来源:互联网 当前栏目:电脑技巧 大家在使用电脑的过程中可能会遇到这样一种情况,电脑在正常使用时突然听不到声音了,这 ...

  6. 安卓如何调出软键盘_Android 软键盘的显示和隐藏,这样操作就对了

    一.前言 如果有需要用到输入的地方,通常会有需要自动弹出或者收起软键盘的需求.开篇明义,本文会讲讲弹出和收起软键盘的一些细节,最终还会从源码进行分析. 想要操作软键盘,需要使用到 InputMetho ...

  7. 安卓如何调出软键盘_Android开发中软键盘的显示和隐藏

    本篇内容通过操作软键盘的函数着手详细分析了隐藏或者显示软键盘的实现方法,并且对其中重要的代码做了详细分析. 一.开篇 如果有需要用到输入的地方,通常会有需要自动弹出或者收起软键盘的需求.开篇明义,本文 ...

  8. Android判断软键盘弹出并隐藏的简单完美解决方案

    Android判断软键盘弹出并隐藏的简单完美解决方案 参考文章: (1)Android判断软键盘弹出并隐藏的简单完美解决方案 (2)https://www.cnblogs.com/thare1307/ ...

  9. android判断键盘是否弹出窗口,Android判断软键盘弹出并隐藏的简单完美解决方法(推荐)...

    最近项目中有一个编辑框,下面是个ListView.在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击.这样的体验效果很不好.于是便想在滑动或单击item时判 ...

最新文章

  1. 国内唯一ACL最佳论文得主冯洋:冲击最佳论文需要知道的事情
  2. github船舰新文件夹_mac下搭建hexo+github
  3. BZOJ3775 : 点和直线
  4. python求矩阵的秩_Python 实现线性代数计算器
  5. hadoop job 数量_Hadoop job任务分配
  6. “互联网+”大赛之AI创新应用赛题攻略:大胆脑洞,共绘智慧生活蓝图
  7. 使用jquery第三方插件(生成曲线图)
  8. 华为:今年至少 3 亿台设备使用鸿蒙;增长 7%,互联网人薪资报告出炉;英特尔侵犯芯片专利被判赔偿 22 亿美元 | 极客头条...
  9. postgresql 索引状态_PostgreSQL中的锁:3.其他锁
  10. Nginx: 解决connect() to xxxx failed (13: Permission denied) while connecting to upstream的问题
  11. Prescan学习笔记
  12. 同花顺python_同花顺有python接口_基于python的炒股软件
  13. 使用C++Test进行白盒测试
  14. Spring Boot获取节假日API
  15. Linux man帮助文档
  16. Google drive谷歌网盘下载副本文件无法调用IDM解决方法
  17. 路由器dns服务器怎么才能自动改变,更改路由器DNS 提高网速又一方法技巧
  18. 【C语言】判断一个浮点数是否等于零
  19. 计算机应用技术未来职业规划书,计算机应用技术专业大学生职业生涯规划书
  20. Android中读values/xml arrays attrs colors dimens string styles

热门文章

  1. 企业微信微盘如何共享文件给外部联系人?
  2. java i=i++和j=i++的区别
  3. windows下 编写的Qt程序连接远程MySQL数据库
  4. 微软发布免费的文件恢复工具
  5. [SPSS]因子分析和因子得分的SPSS实现——学生成绩因子构成和分科建议实例
  6. 什么是Linux发行版 以及各发行版的区别
  7. mysql inet_aton 原理_mysql 使用inet_aton和inet_ntoa处理ip地址
  8. Process finished with exit code 137 (interrupted by signal 9: SIGKILL)错误
  9. Windows Server 2008 R2中关闭“IE增强的安全配置”
  10. 亚马逊云服务(AWS)中国宁夏及北京区域正式上线Amazon SageMaker