最近遇到了关于软键盘的问题,需要获取到软键盘的状态,是否在显示 ,记录一下,方便以后查阅。网上常见的判定状态方法

复制代码 代码如下:
getWindow().getAttributes().softInputMode== WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED
来判断软键盘是否打开,若相等则为打开。试了之后,发现这个只对手机自带的键盘有作用,对安装的第三方的输入法没有效果。
还有介绍使用InputMethodManager 来获取键盘状态,代码如下
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); boolean isOpen=imm.isActive();//isOpen若返回true,则表示输入法打开
这种并不能实时获取到键盘的状态,对我依然没有效果。
后来找到的解决方法,监听屏幕的变化,代码如下:
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.os.Build;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
/**
*
* 软键盘的监听
*/
public class KeyBoardShowListener {
private Context ctx;
public KeyBoardShowListener(Context ctx) {
this.ctx = ctx;
}
OnKeyboardVisibilityListener keyboardListener;
public OnKeyboardVisibilityListener getKeyboardListener() {
return keyboardListener;
}
public interface OnKeyboardVisibilityListener {
void onVisibilityChanged(boolean visible);
}
public void setKeyboardListener(final OnKeyboardVisibilityListener listener, Activity activity) {
final View activityRootView = ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
private boolean wasOpened;
private final int DefaultKeyboardDP = 100;
// From @nathanielwolf answer... Lollipop includes button bar in the root. Add height of button bar (48dp) to maxDiff
private final int EstimatedKeyboardDP = DefaultKeyboardDP + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? 48 : 0);
private final Rect r = new Rect();
@Override
public void onGlobalLayout() {
// Convert the dp to pixels.
int estimatedKeyboardHeight = (int) TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_DIP, EstimatedKeyboardDP, activityRootView.getResources().getDisplayMetrics());
// Conclude whether the keyboard is shown or not.
activityRootView.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
boolean isShown = heightDiff >= estimatedKeyboardHeight;
if (isShown == wasOpened) {
Log.e("Keyboard state", "Ignoring global layout change...");
return;
}
wasOpened = isShown;
listener.onVisibilityChanged(isShown);
}
});
}
}
用法如下:
//监听软键盘的状态
new KeyBoardShowListener(Activity.this).setKeyboardListener(
new KeyBoardShowListener.OnKeyboardVisibilityListener() {
@Override
public void onVisibilityChanged(boolean visible) {
if (visible) {
//软键盘已弹出
} else {
//软键盘未弹出
}
}
}, Activity.this);
以下是可能会遇到的一些情况:
绑定软键盘到EditText
edit.setFocusable(true); edit.setFocusableInTouchMode(true); edit.requestFocus(); InputMethodManager inputManager = (InputMethodManager)edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(edit, 0);
去除软键盘显示:
editMsgView.setText("");
editMsgView.clearFocus();
//close InputMethodManager
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editMsgView.getWindowToken(), 0);
始终不弹出软件键盘
复制代码 代码如下:
EditText edit=(EditText)findViewById(R.id.edit); edit.setInputType(InputType.TYPE_NULL);
也可以:
InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm.isActive()){ //这里可以判断也可以不判断
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0 );
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 弹出软键盘
# 软键盘消失
# 软键盘不消失
# 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
# Android中监听软键盘显示状态实现代码
# Android 显示和隐藏软键盘的方法(手动)
# Android软键盘弹出时的界面控制方法
# Android开发软键盘遮挡登陆按钮的完美解决方案
# Android编程之软键盘的隐藏显示实例详解
# Android开发之软键盘用法实例分析
# Android软键盘遮挡的四种完美解决方案
# Android判断软键盘弹出并隐藏的简单完美解决方法(推荐)
# 页面未随软键盘上升及android隐藏软键盘总结
# Android判断软键盘的状态和隐藏软键盘的简单实例
# 弹出
# 对我
# 并不能
# 自带
# 第三方
# 解决方法
# 只对
# 则为
# 试了
# 绑定
# 大家多多
# 网上
# TypedValue
# view
# util
# Log
# ViewTreeObserver
# public
相关文章:
Python路径拼接规范_跨平台处理说明【指导】
如何获取上海专业网站定制建站电话?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站主机系统SEO优化与智能配置核心关键词操作指南
网站制作软件免费下载安装,有哪些免费下载的软件网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
如何在万网自助建站中设置域名及备案?
如何快速搭建安全的FTP站点?
建站之星Pro快速搭建教程:模板选择与功能配置指南
小程序网站制作需要准备什么资料,如何制作小程序?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
如何制作一个表白网站视频,关于勇敢表白的小标题?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
制作网站的软件免费下载,免费制作app哪个平台好?
Swift中switch语句区间和元组模式匹配
如何选择可靠的免备案建站服务器?
制作旅游网站html,怎样注册旅游网站?
定制建站流程步骤详解:一站式方案设计与开发指南
如何高效完成独享虚拟主机建站?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
MySQL查询结果复制到新表的方法(更新、插入)
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何在Windows环境下新建FTP站点并设置权限?
Python如何创建带属性的XML节点
如何在云服务器上快速搭建个人网站?
如何在服务器上配置二级域名建站?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
广州营销型建站服务商推荐:技术优势与SEO优化解析
完全自定义免费建站平台:主题模板在线生成一站式服务
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何在腾讯云服务器上快速搭建个人网站?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何快速搭建二级域名独立网站?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
代购小票制作网站有哪些,购物小票的简要说明?
建站主机与服务器功能差异如何区分?
建站之星安装模板失败:服务器环境不兼容?
如何在IIS服务器上快速部署高效网站?
设计网站制作公司有哪些,制作网页教程?
如何在Golang中指定模块版本_使用go.mod控制版本号
微信小程序 五星评分(包括半颗星评分)实例代码
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
*请认真填写需求信息,我们会在24小时内与您取得联系。