如何允许用户编辑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
:没有边框和背景?
答案 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"/>
享受吧!