允许EditText在禁用时滚动

时间:2014-04-02 01:11:54

标签: android xml scroll android-edittext

我的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被禁用,我无法上下滚动查看我写的内容。如何禁用更多输入,但仍允许查看已写入的内容?

1 个答案:

答案 0 :(得分:0)

尝试在android:inputType="textMultiLine"上设置EditText。即使我已经在评论中说过:下层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>  

然后,当您使用setOnKeyListenerKeyEvent.ACTION_DOWN处理KeyEvent.ACTION_ENTER方法时,您可以在textview中复制文本并删除您的编辑文字:

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;
    }
});

如果您需要重写文字,可以采用相反的方法 希望这会有所帮助。