java - 如何让 Android EditText 强制其容器滚动

标签 java android android-layout android-edittext scrollview

我有一个 Android 应用程序,它可以创建多行,每行包含两个微调器和一个 EditText。如果内容对于 EditText 来说太宽,它会分成多行,这会弄乱我的布局。所以我调用 setMaxLines(1)。但现在 EditText 在内部滚动。我希望 EditText 水平扩展以适应其内容,并希望包含的 Horizo​​ntalScrollView 滚动。我怎样才能做到这一点?

我尝试将 Horizo​​ntalScrollView 放入 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 添加到从 Defineclasslayout 挂起的 LinearLayouts 层次结构下。

我尝试插入

但这又回到了 EditText 内部的换行。

最佳答案

我找到了解决这个问题的方法。我将每一行设为 Horizo​​ntalScrollView。然后我可以滚动一长行。这不如滚动整个 View 优雅,但它确实有效。

public class OrItem extends HorizontalScrollView implements TextWatcher {
public OrItem(Context context) {
    m_layout = new LinearLayout(context);
    m_nameSelector = new Spinner(context);
    m_contSelector = new Spinner(context);
    m_matchString = new EditText(context);
    m_matchString.setMaxLines(1);
    m_matchString.setInputType(TYPE_CLASS_TEXT);
    m_matchString.setHorizontallyScrolling(false);
}
public boolean setup(...) {
    ViewGroup.LayoutParams ww = new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT
    );
    addView(m_layout);
    m_layout.setOrientation(LinearLayout.HORIZONTAL);
    m_layout.addView(m_nameSelector, ww);
    m_layout.addView(m_contSelector, ww);
    m_matchString.addTextChangedListener(this);
    m_layout.addView(m_matchString, ww);
}

关于java - 如何让 Android EditText 强制其容器滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57526477/

相关文章:

android - 如何从java代码中读取自定义维度属性

java - 变量的 Enum<> 泛型类型的使用

java - 使用参数通过 bootRun 使用 gradle 运行 spring boot 应用程序

android - 设置NumberPicker的增减间隔

android - 在android中更改edittext的背景颜色

android - 改变卡片的背景 (Android cardView)

java - 如何使用 Eclipse 协作开发动态 Web 项目

java - Scala:函数测试字符串的唯一字符

android - 在android上编译错误

android - android/flutter 中的 settings_aar.gradle 有什么用?