应将主Activity的android:windowSoftInputMode设为adjustResize,并用ConstraintLayout包裹ScrollView及底部输入框,确保键盘弹出时布局正确缩放且输入框可见。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

码上飞AI安卓应用中,输入框位于页面底部时,软键盘弹出直接覆盖输入区域,用户无法看到正在输入的内容,也无法点击“立即开发”按钮,导致需求描述流程中断。
检查并修正Activity窗口模式
打开项目中的AndroidManifest.xml文件,定位到码上飞AI主Activity声明节点(通常为.MainActivity或.LaunchActivity)。
确认该Activity未设置android:theme="@android:style/Theme.Translucent"、android:windowIsTranslucent="true"或android:windowFullscreen="true"等全屏/透明主题属性——【这些配置会直接导致adjustResize失效】。
在android:name=".MainActivity"标签内添加或修正如下属性:android:windowSoftInputMode="adjustResize"。
若已存在adjustPan,必须删除并替换为adjustResize;adjustPan会让整个界面平移,顶部导航栏会被顶出屏幕,且键盘收起后布局无法自动复位。
重构根布局为ConstraintLayout + ScrollView嵌套结构
进入对应Activity的布局文件(如activity_main.xml),将最外层容器替换为ConstraintLayout,确保它作为唯一顶层ViewGroup。
在ConstraintLayout内部,用ScrollView包裹全部可滚动内容(含标题、输入框、示例卡片、“立即开发”按钮),并设置android:layout_height="0dp"。
给ScrollView添加约束:app:layout_constraintTop_toTopOf="parent"和app:layout_constraintBottom_toBottomOf="parent",使其高度随窗口可用区域动态伸缩。
【切勿在ScrollView外再套LinearLayout或FrameLayout】——多层嵌套且未设layout_height="0dp"会导致adjustResize下发的高度变化被截断,ContentView收不到尺寸更新信号。
修复输入框区域的布局行为
方法一:使用ConstraintLayout直接锚定输入框
将输入框(EditText)及其父容器(如com.google.android.material.textfield.TextInputLayout)从ScrollView中移出,单独放在ConstraintLayout底部。
设置其约束:app:layout_constraintBottom_toBottomOf="parent",并添加android:layout_marginBottom="?attr/actionBarSize"避免与系统导航栏重叠。
方法二:保持输入框在ScrollView内但启用弹性占位
在ScrollView内,将输入框所在行(例如包含EditText和Button的LinearLayout)设置android:layout_height="wrap_content",并在其上方添加一个View占位,设置android:layout_height="0dp"和android:layout_weight="1",强制其余内容收缩让出空间。
方法三:适配HarmonyOS/ArkUI混合环境(如应用含轻量级元服务页)
若项目已接入ArkUI模块,在对应Page的build()函数开头加入:this.getUIContext().setKeyboardAvoidMode(KeyboardAvoidMode.RESIZE)。
同时确保根Column的height('100%')和width('100%')已声明,且输入框组件未使用.position({x: 0, y: '100%'})这类绝对定位——它会绕过系统避让逻辑,导致键盘弹出时位置完全失控。
验证键盘弹出后导航栏是否被顶出
第一步:运行App,点击底部输入框触发键盘弹出。
第二步:观察顶部标题栏(“说中文,做应用”字样区域)是否仍完整显示在屏幕内。
第三步:若标题栏消失,说明fitsSystemWindows="true"被错误地设在了非DecorView子节点上——立即检查布局中所有fitsSystemWindows属性,只保留根ConstraintLayout上的那一处,其余全部删除。
第四步:若标题栏可见但输入框仍被遮挡一半,说明ScrollView未正确响应高度收缩,此时需回查第二步中ScrollView的layout_height是否为0dp,以及其上下约束是否完整绑定到parent。
第五步:在真机上连续三次快速打开/关闭键盘,确认页面无残留偏移——若键盘收起后页面未恢复原位,说明有JavaScript监听器或自定义View在onSizeChanged中执行了未清理的位移动画,需定位并移除相关代码。

















