Android 弹出软键盘所遇到的坑及解决方法
发布时间 - 2026-01-10 22:47:13 点击率:次demo下载

重要代码:
//1、此layout作为最外层的layout;
//2、设置需要调整的view: setAdjustView(View view);
//3、如果需要控制输入框的显示与隐藏,可以实现OnInputViewVisibleListener接口;
public class SoftInputAdjustLayout extends RelativeLayout {
private static final String TAG = SoftInputAdjustLayout.class.getSimpleName();
private View adjustView;
public SoftInputAdjustLayout(Context context) {
this(context, null);
}
public SoftInputAdjustLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SoftInputAdjustLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
try {
Rect r = new Rect();
getWindowVisibleDisplayFrame(r);
int heightDiff = getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 100) {
if (onInputViewVisibleListener != null) {
onInputViewVisibleListener.onShowInputView();
}
} else {
if (onInputViewVisibleListener != null) {
onInputViewVisibleListener.onHideInputView();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* 需要调整的view
*
* @param adjustView
*/
public void setAdjustView(View adjustView) {
this.adjustView = adjustView;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (adjustView != null) {
Rect rect = new Rect();
getWindowVisibleDisplayFrame(rect);
int totalHeight = getHeight();
int nowHeight = rect.bottom - rect.top;
int keyBoardHeight = totalHeight - nowHeight;
if (keyBoardHeight > totalHeight / 4) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(totalHeight, MeasureSpec.EXACTLY));
LayoutParams params = (LayoutParams) adjustView.getLayoutParams();
params.bottomMargin = keyBoardHeight;
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
LayoutParams params = (LayoutParams) adjustView.getLayoutParams();
params.bottomMargin = 0;
}
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
private OnInputViewVisibleListener onInputViewVisibleListener;
public void setOnInputViewVisibleListener(OnInputViewVisibleListener listener) {
onInputViewVisibleListener = listener;
}
public interface OnInputViewVisibleListener {
void onShowInputView();
void onHideInputView();
}
}
备注:
全屏模式:
1、通过style或者setFlags(…)来设置全屏;
2、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize”;
3、此layout必须作为布局的最外层layout;
4、一定要在布局中添加一个view,如下:
<!--此view用于获取焦点,当软件盘弹出时,根据此view来弹出,而此view在最顶部,且大小为0,所以软件盘弹出,不会把背景顶上去-->
<View
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" />
5、通过setAdjustView(View view)来设置需要调整的view;
6、在全屏模式下,输入框开始是未显示的,直到弹出软键盘,才会显示输入框。因为如果输入框一开始就显示,那软键盘就会根据输入框来弹出,且输入框在底部,那就可能造成把整个view顶上去。所以这时我们应该实现OnInputViewVisibleListener这个接口来控制输入框的显示与隐藏。
非全屏模式
1、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize”;
2、此layout必须作为布局的最外层layout;
3、通过setAdjustView(View view)来设置需要调整的view;
4、如果需要控制输入框的显示与隐藏,就实现OnInputViewVisibleListener这个接口。
以上所述是小编给大家介绍的Android 弹出软键盘所遇到的坑及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# 弹出软键盘
# Android屏蔽软键盘自动弹出的解决方案
# Android判断软键盘弹出并隐藏的简单完美解决方法(推荐)
# android避免弹出软键盘遮盖listview的简单方法
# Android软键盘弹出时的界面控制方法
# Android WebView无法弹出软键盘的原因及解决办法
# 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
# 输入框
# 弹出
# 全屏
# 最外层
# 小编
# 顶上去
# 就会
# 那就
# 在此
# 才会
# 给大家
# 可以实现
# 会把
# 我们应该
# 解决方法
# 所述
# 给我留言
# 感谢大家
# 疑问请
# 有任何
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何快速搭建高效简练网站?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Python面向对象测试方法_mock解析【教程】
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何在香港服务器上快速搭建免备案网站?
深圳网站制作平台,深圳市做网站好的公司有哪些?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
MySQL查询结果复制到新表的方法(更新、插入)
详解MySQL数据库的安装与密码配置
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
教学论文网站制作软件有哪些,写论文用什么软件
?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel怎么使用Intervention Image库处理图片上传和缩放
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
什么是javascript作用域_全局和局部作用域有什么区别?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
iOS中将个别页面强制横屏其他页面竖屏
如何快速搭建高效WAP手机网站?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Android滚轮选择时间控件使用详解
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
如何在橙子建站中快速调整背景颜色?
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel集合Collection怎么用_Laravel集合常用函数详解
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
千库网官网入口推荐 千库网设计创意平台入口
JavaScript Ajax实现异步通信
如何有效防御Web建站篡改攻击?
phpredis提高消息队列的实时性方法(推荐)
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
高端云建站费用究竟需要多少预算?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Python制作简易注册登录系统
Laravel如何处理文件下载请求?(Response示例)
免费网站制作appp,免费制作app哪个平台好?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Angular 表单中正确绑定输入值以确保提交与验证正常工作

