如何让TextView的外观与EditText完全一致?

21

如何使整个 TextView 像 EditText 一样在 match parent 的宽度下都有下划线?

以下代码只会给文本添加下划线,而不是整个 TextView。

textView.setPaintFlags(textView.getPaintFlags()| Paint.UNDERLINE_TEXT_FLAG);
我想使用TextView的原因是,对于TextView,单击即可立即触发setOnClickListener,而对于被禁用的可编辑EditText,则需要两次点击才能触发。


3
如果你想让某个控件看起来像是可编辑的文本框,但实际上不可编辑,你可以使用一个EditText并将其禁用。这样,它也会具有正确的文本颜色,向用户暗示该文本框无法编辑。 - David Medenjak
我想使用TextView的原因是,对于TextView而言,setOnClickListener在一次轻触中立即触发,而对于已禁用编辑的EditText,则需要两次轻触。 - Andrew Lam
2个回答

53

你可以将EditText的背景放在TextView上。例如:

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Your text"
            android:hint="My hint"
            android:textColor="?attr/editTextColor"
            android:background="?attr/editTextBackground"
            android:gravity="center_vertical"
            android:textAppearance="?android:attr/textAppearanceMediumInverse"
            />

如果您正在使用AppCompat主题,可能希望将文本外观更改为android:textAppearance="@style/TextAppearance.AppCompat.Button"


5
android:background="?attr/editTextBackground" 是我的问题的答案。非常感谢,这很有帮助。 - Andrew Lam
太棒了,你节省了我的时间。 - Khizar Hayat
有没有一种方法可以实现只读EditText样式的相同效果?当TextView不可编辑时,下划线应该像普通EditText那样变灰,即“setEnable(false) && setClickable(false)”。有什么想法吗? - Federico Alvarez

12

你可以在不写很多XML属性的情况下实现这一点:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Your text"
        android:hint="Your hint"
        style="@android:style/Widget.EditText"
        />

1
据我所观察,按照您提出的方式应用“style”会改变“TextView”的行为和视觉风格,使其变成“EditText”,而不仅仅是应用视觉风格。键盘会显示,您可以输入文本,并且在此控件上第二次点击后将触发“onClick”事件。如果您基于具有上述属性的“TextView”定义自己的样式,则应用样式会更有意义。 - Variag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接