安卓开发——如何判断软键盘是否弹出(显示)
2017-12-23 21:21
471 查看
在开发中涉及到了如下情况:表情界面与软键盘只显示其一,与当前主流社交软件的逻辑一致。
这时就需要根据情况获取当前软键盘是否处于弹出状态,网上搜了搜,都是一些拷贝来拷贝去的无用办法,如:
1、
无卵用。
2、
由于谷歌官方并没有提供与判断软键盘是否弹出的相关方法,只能通过计算布局高度来解决:
附上获取导航栏的方法:
这时就需要根据情况获取当前软键盘是否处于弹出状态,网上搜了搜,都是一些拷贝来拷贝去的无用办法,如:
1、
if(getWindow().getAttributes().softInputMode == WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE){ Toast.makeText(Main3Activity.this, "显示", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(Main3Activity.this, "没显示", Toast.LENGTH_SHORT).show(); }
无卵用。
2、
if(inputMethodManager.isActive(editText)){ Toast.makeText(Main3Activity.this, "显示", Toast.LENGTH_SHORT).show(); }else { Toast.makeText(Main3Activity.this, "没显示", Toast.LENGTH_SHORT).show(); }这个办法弊病在于只要editText有焦点,就一直是true,然而并不是editText获得焦点键盘就会弹出。无卵用。
由于谷歌官方并没有提供与判断软键盘是否弹出的相关方法,只能通过计算布局高度来解决:
private boolean isSoftShowing() { //获取当前屏幕内容的高度 int screenHeight = getWindow().getDecorView().getHeight(); //获取View可见区域的bottom Rect rect = new Rect(); //DecorView即为activity的顶级view getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); //考虑到虚拟导航栏的情况(虚拟导航栏情况下:screenHeight = rect.bottom + 虚拟导航栏高度) //选取screenHeight*2/3进行判断 return screenHeight*2/3 > rect.bottom; }这里面用了一个巧方法,就是选取屏幕高度的2/3来判断,如果你觉得这个不靠谱的话,也可以获取到虚拟导航栏的高度,进行相应判断。
附上获取导航栏的方法:
/** * 底部虚拟按键栏的高度 * @return */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private int getSoftButtonsBarHeight() { DisplayMetrics metrics = new DisplayMetrics(); //这个方法获取可能不是真实屏幕的高度 mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics); int usableHeight = metrics.heightPixels; //获取当前屏幕的真实高度 mActivity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); int realHeight = metrics.heightPixels; if (realHeight > usableHeight) { return realHeight - usableHeight; } else { return 0; } }
相关文章推荐
- 安卓开发如何判断EditText是否有输入?
- Android软键盘(五)如何判断软键盘是否显示
- IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)
- 如何判断SQL SERVER中的某个数据库中的某个表是否有索引,并将索引名称显示出来?
- 基于webkit开发软件时,判断安卓手机是否连上网
- 近期的安卓学习开发SOS APP的一些总结文档 (拨打电话 加载首页图片的异步代码 判断是否有网络代码)
- ios如何判断键盘是否已经显示
- android 判断软键盘是否弹出
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- 《剑指offer》:[22]如何判断一个序列是否为栈的弹出序列
- 安卓开发,点击通知栏进入指定页面及判断App是否启动
- WinForm如何控制ShowDialog()的返回值,并且可以判断是否会弹出主窗体
- 如何用DataGrid实现根据日期判断是否显示New标志
- Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
- 安卓开发之输入法弹出和界面设置是否移动
- 判断软键盘是否弹出 并且隐藏
- 安卓开发如何判断SIM卡运营商
- 字符串按指定字节数截取、隐藏与显示输入软键盘、收起状态栏以及判断服务是否运行功能代码段
- 近期的安卓学习开发SOS APP的一些总结文档 (拨打电话 加载首页图片的异步代码 判断是否有网络代码)
- iOS开发时如何判断APP是否第一次运行