【发布时间】:2019-12-22 21:17:21
【问题描述】:
我有一个 Android 应用程序,它可以创建多行,每行包含两个微调器和一个 EditText。如果内容对于 EditText 来说太宽,它会分成多行,这会打乱我的布局。所以我调用 setMaxLines(1)。但现在 EditText 在内部滚动。我希望 EditText 水平扩展以适应其内容和包含的 HorizontalScrollView 滚动。我该怎么做?
我尝试将 HorizontalScrollView 放在 ScrollView 中,反之亦然。两种方式都行不通。我希望将(两个)LayoutParams 设置为 wrap_content 会起作用,但它不起作用。
我没有包含所有代码,因为它是一个大应用程序。这是布局 XML:-
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- This is an invisible view to request the focus when an EditText gets deleted
in order to stop Android highlighting something else.
It would be nicer to go back into touch mode,
but Android does not provide a way of doing that. -->
<TextView
android:layout_width="1dp"
android:layout_height="1dp"
android:text=""
android:alpha="0"
android:id="@+id/defineinvisible"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/defineclasslayout">
</LinearLayout>
</LinearLayout>
</ScrollView>
</HorizontalScrollView>
包含 EditText 的行是动态添加的,因为它们的数量会随着应用的运行而变化。
添加一行的代码看起来有点像这样(我省略了一些不相关的细节):-
public class OrItem extends LinearLayout implements TextWatcher {
public OrItem(Context context) {
m_nameSelector = new Spinner(m_context);
m_contSelector = new Spinner(m_context);
m_matchString = new EditText(m_context);
m_matchString.setHorizontallyScrolling(false); m_matchString.setMaxLines(1);
m_matchString.setInputType(TYPE_CLASS_TEXT);
}
public setup(...) {
ViewGroup.LayoutParams ww = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
setOrientation(LinearLayout.HORIZONTAL);
addView(m_nameSelector, ww);
addView(m_contSelector, ww);
m_matchString.setText(sa[2]);
m_wasEmpty = sa[2].isEmpty();
m_matchString.addTextChangedListener(this);
addView(m_matchString, ww);
}
}
OrItem 被添加到 LinearLayouts 的层次结构下,该层次结构从 defineclasslayout 挂起。
我尝试插入
但这又回到了 EditText 内的换行。
【问题讨论】:
-
抱歉,我的问题结尾出现了乱码,试图摆脱“看起来像代码”的拒绝。我尝试了 setMaxLines(1)、setSingleLine()、setInputType(TYPE_CLASS_TEXT) 和 setHorizontalScrolling(false) 的各种组合。它在 EditText 内滚动或换行,这不是我想要的。
标签: java android android-layout android-edittext scrollview