Jetpack Compose安卓应用软键盘隐藏动画异常原因排查
以下是针对你遇到的「相同代码在现有项目出现软键盘隐藏动画异常、新项目正常」问题的常见排查方向:
AndroidManifest窗口属性差异
现有项目的Activity可能配置了不合适的android:windowSoftInputMode属性。比如设置为adjustPan时,系统会直接平移整个布局而非平滑调整空间,就会出现输入框突然跳回的异常;而新项目默认的adjustResize会让布局随软键盘变化平滑过渡。
排查:对比两个项目AndroidManifest.xml中对应Activity的windowSoftInputMode配置,确保现有项目使用adjustResize。依赖库版本不一致
现有项目的Jetpack Compose、AppCompat等依赖版本可能较旧,存在软键盘动画的已知Bug。比如早期版本的Compose Material库在布局调整时的动画逻辑有缺陷。
排查:对比两个项目Module级build.gradle中的依赖版本,将现有项目的Compose相关依赖(如compose-bom、material、activity-compose)升级到与新项目一致的版本。主题样式冲突
现有项目的App主题可能自定义了窗口动画相关属性,比如禁用了布局调整动画,或者修改了动画时长。例如主题中设置了android:windowAnimationStyle为自定义样式,干扰了软键盘隐藏时的默认动画。
排查:对比两个项目的主题配置文件(styles.xml/theme.xml),尝试将现有项目的主题临时替换为新项目的默认主题(如Theme.MaterialComponents.DayNight.DarkActionBar),验证问题是否消失。第三方库或全局配置干扰
现有项目可能引入了第三方键盘SDK、全局布局监听库,或者在Application类中设置了全局布局调整逻辑,这些代码可能强制修改windowSoftInputMode或拦截布局变化事件,导致动画异常。
排查:逐步移除第三方库或注释Application类中的全局配置,逐一验证是否是某个组件导致的问题。布局层级差异
虽然测试代码是单个TextField,但现有项目的整体布局层级可能更复杂(比如嵌套在Scrollable容器、自定义Layout中),父组件的布局逻辑或修饰符(如未正确处理imePadding)可能影响了动画表现。
排查:在现有项目中新建一个空白Activity,只保留测试代码中的TextField,如果问题消失,说明原Activity的布局层级或其他代码存在冲突。
内容的提问来源于stack exchange,提问作者WilliamX

