【问题标题】:Allow EditText to Scroll while Disabled允许 EditText 在禁用时滚动
【发布时间】:2014-04-02 01:11:53
【问题描述】:

我有一个EditText 设置如下:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="beforeDescendants"
        android:focusableInTouchMode="true"
        android:orientation="vertical" >

        <EditText
            android:layout_width="match_parent"
            android:layout_height="375dp"
            android:ems="10"
            android:gravity="top">
        </EditText>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</ScrollView>

在程序中的某个点,输入文本后,EditText 被以下代码禁用:

edittext.setFocusable(false);
edittext.setEnabled(false);

问题是,一旦EditText 被禁用,我就无法上下滚动查看我写的内容。如何禁用更多输入,但仍允许查看已写入的内容?

【问题讨论】:

  • 作为记录,当我尝试你的代码时,我已经很难滚动 EditText 甚至在它被禁用之前。将可滚动小部件放入 ScrollView 不是一个好主意。是否可以不将高度固定为某个值?
  • (1.) ScrollView 对我没有任何问题;它完全按照我的预期工作。它实际上是我所需要的,因为它解决了与我的问题无关的不同问题。 (2.) 由于与此问题无关的另一个原因,高度是固定的。
  • 如何创建一个不可见的文本视图,当你禁用编辑文本时,你复制文本视图中的文本并出现?因为即使您将 textMultiLine 设置为您的 edittext,在较低的 API 上也存在一个错误,并且您将无法在 2 行之后滚动..
  • 谢谢。这当然是一个可行的解决方法。如果你把它作为答案,并且没有更好的建议出现,我会接受它。

标签: android xml scroll android-edittext


【解决方案1】:

尝试在您的EditText 上设置android:inputType="textMultiLine"。即使我已经在 cmets 中说过:在较低的 API 上存在一个错误,但使用固定高度也许它会起作用。

但是,如果这不起作用,您应该创建另一个视图作为TextView,具有与EditText 相同的属性,并且对gone 具有可见性,如下所示:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:descendantFocusability="beforeDescendants"
        android:focusableInTouchMode="true"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/edittext"
            android:layout_width="match_parent"
            android:layout_height="375dp"
            android:ems="10"
            android:gravity="top" >
        </EditText>

        <TextView
            android:id="@+id/textview"
            android:layout_width="match_parent"
            android:layout_height="375dp"
            android:ems="10"
            android:gravity="top"
            android:visibility="gone" >
        </TextView>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</ScrollView>  

然后,当您使用KeyEvent.ACTION_DOWNKeyEvent.ACTION_ENTER 处理setOnKeyListener 方法时,您可以在textview 中复制您的文本并删除您的edittext:

edittext.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
            String st = edittext.getText().toString();
            textview.setVisibility(View.VISIBLE);
            textview.setText(st);
            return true;
        }
        return false;
    }
});

如果你需要重写你的文本,你可以做一个反向的方法。
希望这会有所帮助。

【讨论】:

  • 设置android:inputType="textMultiLine" 似乎没有任何作用,但是制作一个不可见的TextView 然后再切换它就可以了。
猜你喜欢
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多