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 】
相关推荐:
MySQL查询结果复制到新表的方法(更新、插入)
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Linux后台任务运行方法_nohup与&使用技巧【技巧】
如何选择PHP开源工具快速搭建网站?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
linux top下的 minerd 木马清除方法
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Android okhttputils现在进度显示实例代码
如何在服务器上配置二级域名建站?
如何快速生成ASP一键建站模板并优化安全性?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
如何快速搭建高效简练网站?
高防服务器租用如何选择配置与防御等级?
如何有效防御Web建站篡改攻击?
如何在香港服务器上快速搭建免备案网站?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel如何使用Blade模板引擎?(完整语法和示例)
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
html如何与html链接_实现多个HTML页面互相链接【互相】
如何用美橙互联一键搭建多站合一网站?
Laravel怎么实现模型属性的自动加密
如何在腾讯云服务器快速搭建个人网站?
如何用IIS7快速搭建并优化网站站点?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
如何用5美元大硬盘VPS安全高效搭建个人网站?
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
微信小程序 HTTPS报错整理常见问题及解决方案
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
EditPlus中的正则表达式 实战(1)
使用Dockerfile构建java web环境
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
如何挑选高效建站主机与优质域名?
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Swift中循环语句中的转移语句 break 和 continue
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
如何续费美橙建站之星域名及服务?
如何用景安虚拟主机手机版绑定域名建站?
Internet Explorer官网直接进入 IE浏览器在线体验版网址

