44

我怎样才能允许用户编辑一个TextView?当然,我可以EditText改用,但我不知道如何自定义它,而且我已经阅读了TextView可以编辑的 Android 文档。所以我尝试了这个:

<TextView android:id="@+id/tv"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textSize="80sp"
          android:text="MyText"
          android:editable="true"
          android:singleLine="true"
          android:inputType="text"
          android:focusable="true"
          android:clickable="true"
          android:cursorVisible="true"/>

但它看起来仍然很常见TextView。有谁知道我错过了什么?或者,可能是,如何定制EditText它看起来像TextView:没有边框和背景?

4

6 回答 6

85

我知道你不想使用 anEditText但很容易让它看起来像TextView.

<EditText
     android:id="@+id/Id"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="@android:color/transparent" >
 </EditText>

您也可以使用android:background="@null".

编辑:

的参数确实使它可编辑(有一些限制)TextVieweditable

如果您设置android:editable="true",您可以TextView通过方向键访问,或者您可以添加android:focusableInTouchMode="true"以能够获得对触摸的关注。

问题是您无法修改现有文本,也无法移动光标。您编写的文本会添加到现有文本之前。

于 2012-08-21T13:43:24.220 回答
8

你可以伪造一个可编辑的 Textview。您只需要在触摸它时隐藏文本视图(使其“可点击”),用 EditText 替换它,并在编辑结束时再次显示它。

于 2012-08-21T13:37:58.827 回答
7

您可以通过添加这些行使您的 TextView 可编辑

tv.setFocusable(true);
tv.setEnabled(true);
tv.setClickable(true);
tv.setFocusableInTouchMode(true);
于 2016-03-11T11:15:01.683 回答
4

TextView 定义了 EditText 上的所有功能,但没有对它们的内置支持。EditText 的一些主要区别:

a)方法 getDefaultEditable() 返回 true。这只是将这个子类定义为可编辑的标记。

b)一种运动方法。是一个控制光标行为的对象(位置、向后/向前移动 - 在某些语言中可能会发生变化等)。相反,TextView 只返回 null,因为无论如何都不是光标。

c)方法 CharSequence getText()。TextView 为此返回一个字符串。EditText 使用表示可变文本缓冲区的特定字符序列实现(可编辑)。

正因为如此,我们不能把 TextView 想象成一个受约束的 EditText。TextView 草图编辑界面,但不实现自身。

如果您需要一个有时可以关闭编辑的文本组件,您正在寻找 EditText 组件。

于 2014-11-17T19:29:33.817 回答
2
    tv.setCursorVisible(true);
    tv.setFocusableInTouchMode(true);
    tv.requestFocus();
    tv.setEnabled(true);
于 2017-07-22T07:40:29.353 回答
0

我终于通过以编程方式创建TextView找到了解决您问题的方法

TextView textView = new TextView(context, null, android.R.attr.editTextStyle) {
    @Override
    public boolean getDefaultEditable() {
        return true;
    }
};

或在 XML 中

<TextView
android:id="@+id/textView_ID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:style="@android:attr/editTextStyle"
android:editable="true"/>

享受!

于 2021-05-14T17:38:04.687 回答