如何让Entry组件实现多行显示且禁止横向滚动?
实现Android平台多行Entry组件(无横向滚动)
要让Entry组件(对应Android原生的EditText)实现多行显示、自动换行且无横向滚动,按以下方式配置即可:
原生Android布局基础配置
直接在XML布局里给EditText设置关键属性,就能达到示意图右侧的效果:
<EditText android:id="@+id/multiLineEntry" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textMultiLine" <!-- 开启多行输入模式 --> android:scrollHorizontally="false" <!-- 禁用横向滚动 --> android:minLines="1" <!-- 默认至少显示1行 --> android:maxLines="5" <!-- 按需设置最大行数,超出后将出现纵向滚动 --> android:gravity="top|left" <!-- 文本从左上角开始排版 --> android:hint="输入内容..." />
动态自适应高度(可选)
如果需要让高度完全随内容行数自动调整(无最大行数限制),可以给EditText添加文本变化监听,实时计算并调整高度:
EditText editText = findViewById(R.id.multiLineEntry); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { editText.setHorizontallyScrolling(false); editText.setSingleLine(false); // 延迟计算高度,确保文本已完成更新 editText.post(() -> { int lineCount = editText.getLineCount(); if (lineCount > 0) { float lineHeight = editText.getLineHeight(); // 计算总高度:行高×行数 + 上下内边距 int totalHeight = (int) (lineHeight * lineCount + editText.getPaddingTop() + editText.getPaddingBottom()); editText.setHeight(totalHeight); } }); } @Override public void afterTextChanged(Editable s) {} });
若使用Xamarin.Forms框架
对应的Entry组件配置如下,同样能实现多行自适应、无横向滚动:
<Entry HorizontalOptions="Fill" VerticalOptions="Start" Keyboard="Text" LineBreakMode="WordWrap" HeightRequest="Auto" Placeholder="输入内容..." />
配置完成后,组件会自动将超出宽度的文本换行,不会出现横向滚动条,高度随内容行数自动调整,和你需要的效果一致。
内容的提问来源于stack exchange,提问作者Manos Stg
相关产品推荐
相关产品推荐

