【Android应用】【监听软键盘弹起与关闭】
【背景】
在很多App开发过程中需要在Activity中监听Android设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹起与关闭。
【预备知识】
在manifest文件中可以设置Activity的android:windowSoftInputMode属性,这个属性值常见的设置如下:
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
那么这里值的含义列表如下:
【1】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【2】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【3】stateHidden:用户选择activity时,软键盘总是被隐藏
【4】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【5】stateVisible:软键盘通常是可见的
【6】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【7】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【8】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【9】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
【示例】
(1)首先我们需要将监听所在的Activity在Manifest文件中的设置为如下形式:
<activityandroid:name="com.bear.softkeyboardlistener.MainActivity"android:label="@string/app_name"android:windowSoftInputMode="stateAlwaysHidden|adjustResize" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
这样设置之后,当有软键盘弹起来的时候,Activity的布局大小会被压缩上去,但是你仍然可以通过滑动浏览所有。
(2)我们要为Activity的最外面的Layout设置一个OnLayoutChangeListener监听器:
import com.bear.bearbroadcastreceiver.R;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnLayoutChangeListener;
import android.widget.Toast;public class MainActivity extends Activity implements OnLayoutChangeListener{//Activity最外层的Layout视图private View activityRootView;//屏幕高度private int screenHeight = 0;//软件盘弹起后所占高度阀值private int keyHeight = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);activityRootView = findViewById(R.id.root_layout);//获取屏幕高度screenHeight = this.getWindowManager().getDefaultDisplay().getHeight();//阀值设置为屏幕高度的1/3keyHeight = screenHeight/3;}@Overrideprotected void onResume() {super.onResume();//添加layout大小发生改变监听器activityRootView.addOnLayoutChangeListener(this);}@Overridepublic void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {//old是改变前的左上右下坐标点值,没有old的是改变后的左上右下坐标点值// System.out.println(oldLeft + " " + oldTop +" " + oldRight + " " + oldBottom);
// System.out.println(left + " " + top +" " + right + " " + bottom);//现在认为只要控件将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();}}
下面是整个demo源码的下载链接:
Android SoftKeyboard Listener Demo
【Android应用】【监听软键盘弹起与关闭】相关推荐
- Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式
Android App监听软键盘按键的三种方式与改变软键盘右下角确定键样式 actionNone : 回车键,按下后光标到下一行 actionGo : Go, actionSearch : 放大镜 a ...
- android 代码设置 键盘适应_Android自适应软键盘的Dialog以及监听软键盘弹起
最近项目中遇到一个需求:新手引导.跟一般的新手引导没有什么太大区别,思路都是搞一个带阴影的遮罩层,然后在上边儿给一些提示性的文字,由于需求中有些特殊的地方,所以我用了一个全屏的dialog(而且,di ...
- h5 移动端 监听软键盘弹起、收起
前面一篇博客 h5 安卓 键盘弹起界面适配 修改webview高度提到了在adnroid中如何监听软键盘的弹起与收起,是利用的窗口的高度发生变化 window.onresize事件来做突破点的,但是i ...
- h5 移动端 监听软键盘弹起、收起
前面一篇博客 h5 安卓 键盘弹起界面适配 修改webview高度提到了在adnroid中如何监听软键盘的弹起与收起,是利用的窗口的高度发生变化 window.onresize事件来做突破点的,但是i ...
- Android App监听软键盘按键的三种方式(转)
最近有类似需求,在csdn上刚好发现,粘贴过来,以防止忘记喽 前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的&quo ...
- Android App监听软键盘按键的三种方式
前言: 我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的"GO"按键加载url页面:在点击搜索框的时候,点 ...
- Android App监听软键盘按键的三种方式 以及 输入法删除退格键的冲突问题解决
输入法删除退格键的冲突问题解决 /***返回键处理 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if( even ...
- H5 (React) 移动端监听软键盘弹起、收起
前言:H5 有时底部按钮是固定定位,当页面上面需要用到输入内容时,会弹起软键盘,然后把底部固定的按钮也弹起来了,我们希望弹起软键盘时,底部的固定定位按钮隐藏,这里就需要对移动端软键盘弹起收起进行监听. ...
- android中监听软键盘的弹出与隐藏,并获取软键盘的高度
最近项目中有一个需求上弹出软键盘的时候,输入框位移至输入框上方,但是Activity中其他的VIew都不动.这个需求需要监听软软键盘的弹出与隐藏,并获取键盘的高度.上网找了一下发现,Android竟然 ...
最新文章
- java用opencv实现滤镜_opencv滤镜-二值化实现黑白滤镜
- 棋盘游戏的人工智能(二)------剪支
- MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列
- 产品策略研究期的数据分析与挖掘
- opencv+pythons相机标定源码解析
- idea的总部_Studio Didea新总部办公室,意大利 / Studio Didea
- 5月第二周全球五大顶级域名总量新增10.5万个
- (转载)正则表达式30分钟入门教程
- python文本文件读写的3种方法
- vscode配置js环境_VS Code配置Python开发环境
- jquery easyui 封装
- HFSS - 圆极化矩形微带天线设计与仿真
- Kettle下载和安装
- 91 全能地图下载器和 bigemap地图下载器哪个好用?
- 自然语言处理的学习心得
- 什么叫单模光纤_单模光纤是什么?单模光纤有哪些分类?
- java外文文库_java外文文献毕业设计
- 删除文件提示该路径不存在 解决办法
- 华为PPPoE、PPP/MP、IP-Trunk配置
- 【回顾】“双11”首个元宇宙日 中国移动通信联合会元宇宙产业委员会揭牌 《元宇宙产业宣言》发布