Android RelativeLayout下多行输入时EditText如何固定不移动
问题根源
当前配置下出现EditText移位的核心原因有两个:
- 控件本身用了
wrap_content作为高度值,多行输入时控件高度会随文本行数不断膨胀,连带改变在布局中的占位 - 系统默认的软键盘弹出模式会自动调整页面布局位置,把输入控件顶到软键盘上方,打破原本固定在顶部的定位规则
适配现有RelativeLayout的实现方案
全程不需要更换现有布局结构,按以下步骤调整即可:
- 替换EditText的自适应高度为固定值:将
android:layout_height="wrap_content"改为你需要的固定可视高度,比如180dp,从根源上避免控件尺寸随输入内容变化。注意:固定高度的数值可以根据实际需要的输入可视行数调整,不需要完全照搬参考值 - 开启EditText内部垂直滚动能力:删掉冗余的
android:scrollHorizontally="true"属性,替换为android:scrollbars="vertical";同时在对应页面的Java/Kotlin代码里给EditText设置滚动支持,否则超出可视区域的文本无法在控件内部滚动:// 找到对应控件后添加这行代码 textInput.setMovementMethod(new ScrollingMovementMethod()); - 保留已配置的
android:gravity="start|top"属性,保证文本始终从控件左上角排布,不会因为固定高度出现文本居中错位 - 锁定软键盘弹出时的布局行为:在AndroidManifest.xml里找到承载这个EditText的Activity节点,添加软键盘配置
android:windowSoftInputMode="adjustNothing",软键盘弹出时系统不会自动调整页面位置,EditText就不会被强行顶走
调整后的EditText参考布局
<EditText android:id="@+id/textinput" android:layout_width="331dp" android:layout_height="180dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="85dp" android:ems="10" android:gravity="start|top" android:inputType="textNoSuggestions|textMultiLine" android:scrollbars="vertical" android:hint="Input your secret text here.."/>
内容的提问来源于stack exchange,提问作者leafrain-Legit
相关产品推荐
相关产品推荐

