安卓应用开发学习:解决退出输入法软键盘后,页面被遮挡的区域不显示的问题
这篇日志记录了作者在安卓应用开发中遇到的一个怪异问题及解决过程。在将单页应用升级为多页应用(使用ViewPager2和Fragment)后,发现软键盘关闭后界面部分区域被遮挡的问题。作者在DeepSeek的帮助下尝试了多个解决方案,最终通过修改AndroidManifest.xml文件中的windowSoftInputMode属性为"adjustPan|stateHidden"
一、引言
在我发布的前一篇日志《安卓应用开发学习:应用ViewPager2翻页视图实现页面水平切换》里,简单记录了我将自己开发的第一个安卓app从单页升级到多页,并实现水平翻页的大致过程。实际上这个过程并没有那么顺利,在开发中也遇到了些问题,这篇日志就是记录其中一个非常怪异的问题及其解决办法。
二、问题描述
我本次升级的这款安卓app的老版本是一个单页界面的小软件,这次根据新的需求进行升级,我将之改造成了多页。新、旧版本在界面结构上有很大变化。
老版本只有一个“activity_main.xml”文件,所有的功能组件都是放在这个xml文件中。

(老版本是个单页面应用)

(所有的布局组件都在一个xml文件中)
新版本则因为拓展到三个页面,并要实现页面的水平切换,因此用到了Fragment结构,xml文件变成了4个。“activity_main.xml”文件中,只放了翻页视图ViewPager2组件和翻页便签栏TabLayout组件,用于显示Fragment及标签栏。3个fragment文件中则放置了计算用的组件,以应对不同的工作场景。

(新版本的activity_main.xml文件很简洁)

(新版本的其它组件放在了三个Fragment文件中)
软件的升级开发借助了DeepSeek的帮助省去了不少的时间,在完成开发工作后,进行实机测试的过程中出现了问题。问题的表现是:
当点击页面中的EditText组件输入数据时,手机屏幕上会弹出输入法软键盘。在完成数据输入后,关闭软键盘,应用界面中之前被输入法软键盘遮挡的部分不显示了。

(正常状态下)

(点击任一EditText组件会弹出软键盘)

(关闭软键盘后,被其遮挡的区域就不显示了)
被遮挡的部分是计算结果的显示区域。我发现,当我点击界面中的“计算按钮”或“重置”按钮,软件会执行计算操作或重置操作(这两个操作都有对显示结果的组件清零的操作,应该会触发页面的重新刷新),这个时候被遮挡的部分会再次显示。
三、问题的解决
经过分析,这个问题的出现,可能就是我使用了翻页视图ViewPager2组件和Fragment结构造成的,之前的单页面从未发生过。但要如何解决,我没有头绪。这样的难题,还是交给DeepSeek吧。
我向DeepSeek描述了我所遇到的问题,并要求它提供解决方案。

经过分析,DeepSeek认为当软键盘弹出时,可能会改变Activity的窗口大小,导致布局被压缩。当软键盘关闭后,布局可能没有自动恢复,导致部分区域被遮挡。DeepSeek提供了四个解决方案,并推荐优先使用方案1。





我按推荐的方案1,对AndroidManifest.xml进行了修改,再次测试,问题仍然存在。
接着我又按照最佳实践建议中的第2条,结合方案1和方案4,但问题仍然没有得到解决。
我将情况反馈给DeepSeek,经过思考后,DeepSeek又给了四个方案。





我这次没有按推荐顺序尝试,而是先按方案6修改Fragment布局文件,没能解决问题,之后我再尝试了方案8,结果成功了。
方案8与方案1是同一个思路,只是参数不同。
方案1中,在AndroidManifest.xml里添加windowSoftInputMode属性的语句是:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustResize|stateHidden">
<!-- 其他配置 -->
</activity>
方案8中,在AndroidManifest.xml里添加windowSoftInputMode属性的语句是:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustPan|stateHidden"
android:exported="true">
<!-- intent-filter -->
</activity>
我将成功解决问题的信息反馈给DeepSeek,它给出了总结,这对深入了解相关的知识很有帮助。


火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)