Android:如何使TextView可编辑?

时间:2012-08-21 13:34:17

标签: android

如何允许用户编辑TextView?当然,我可以使用EditText,但我不知道如何自定义它,而且我在Android文档中读到TextView可以编辑。所以我尝试了这个:

<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:没有边框和背景?

6 个答案:

答案 0 :(得分:70)

我知道您不想使用EditText,但很容易让它看起来像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"

修改:

TextView的{​​{1}} param 确实使其可编辑(有一些限制)。

如果您设置了editable,则可以通过D-pad访问android:editable="true",或者您可以添加TextView以便能够专注于触摸。

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

答案 1 :(得分:8)

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

答案 2 :(得分:6)

您可以通过添加这些行

来使TextView可编辑
tv.setFocusable(true);
tv.setEnabled(true);
tv.setClickable(true);
tv.setFocusableInTouchMode(true);

答案 3 :(得分:3)

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

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

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

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

因为这样,我们无法将TextView视为受限制的EditText。 TextView草绘编辑界面,但不实现自己。

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

答案 4 :(得分:1)

    tv.setCursorVisible(true);
    tv.setFocusableInTouchMode(true);
    tv.requestFocus();
    tv.setEnabled(true);

答案 5 :(得分: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"/>

享受吧!