How to hide underbar in EditText
如何隐藏EditText下栏(结尾有小衬线的提示行)?
也许有更好的方法来做我想做的事情:我有一个带有EditText的布局。通常,在用户可以点击它并开始输入或编辑文本的地方,这会显示良好。
但是,有时我希望使用相同的布局(简化其他逻辑)以只读方式显示相同的数据。我希望演示文稿是相似的-它应该有相同的高度和字体,但没有底线。
作为一个停止间隙度量,我将通过删除EditText并替换一个TextView来实现这一点。我认为这会产生期望的结果,但这似乎是一种迂回的昂贵方法,通过改变属性来做一些应该很容易做的事情。
您可以将
1 | android:background="@android:color/transparent" |
或
1 | android:background="@null" |
将背景设置为空。
1 | android:background="@null" |
请将EditText背景设置为
它会起作用的。
可以将
但你可以在
您可以使用
1 | editText.setBackgroundResource(android.R.color.transparent); |
使用任一属性:
1 | android:background="@null" |
或
1 | android:background="@android:color/transparent" |
为我隐藏编辑文本的下划线而工作。
但是,请注意,它会导致我围绕
以下是隐藏它的方法,而不破坏默认填充:
1 2 3 4 5 6 7 8 | fun View.setViewBackgroundWithoutResettingPadding(background: Drawable?) { val paddingBottom = this.paddingBottom val paddingStart = ViewCompat.getPaddingStart(this) val paddingEnd = ViewCompat.getPaddingEnd(this) val paddingTop = this.paddingTop ViewCompat.setBackground(this, background) ViewCompat.setPaddingRelative(this, paddingStart, paddingTop, paddingEnd, paddingBottom) } |
用途:
1 | editText.setViewBackgroundWithoutResettingPadding(null) |
我所做的是创建一个可绘制的形状,并将其设置为背景:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <padding android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp" /> <solid android:color="#fff" /> </shape> |
注:我实际使用了
您还必须设置minwidth,否则,如果文本为空,光标将消失。
1 2 3 4 5 6 7 8 9 10 | <EditText android:id="@+id/et_card_view_list_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="30dp" android:layout_weight="1" android:inputType="text" android:text="Name" android:background="@android:color/transparent" /> |
如果编辑文本已经有背景,则可以使用以下内容。
1 | android:textCursorDrawable="@null" |
我有这样的东西,非常有用:
1 | generalEditText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP); |
其中GeneralEditText是我的EditText,而白色是:
1 | <color name="white">#ffffff</color> |
这将不会删除填充,并且您的EditText将保持原样。只删除底部的行。有时这样做更有用。
如果您使用
如果你设置背景NULL并尝试上面提供的Java代码,你的应用程序在执行它后就会崩溃。(因为它得到了背景,但它是空的。)这可能很明显,但我认为指出它很重要。
我发现了最奇怪的东西!如果使用数据绑定将其设置为
然后,不仅删除了背景,而且视图还有根据默认背景计算的填充。因此,出于某种原因,延迟的空设置没有从以前的bg中清除填充。视图上的填充是左/上/右4dp,下13dp(来自Emulator级别21)。
在所有API级别上可能没有相同的最终结果,所以要小心!有人告诉我,如果你测试这个并发现它是可靠的。(还要注意,底部填充物之所以突出,是因为原始的下划线。所以您可能希望在XML中更改它,或者在加载到相等的top之后在代码中重置它…
如果希望此操作影响EditText的所有实例和继承该实例的任何类,则应在主题中设置属性EditTextBackground的值。
1 | <item name="android:editTextBackground">@drawable/bg_no_underline</item> |
我使用的可绘图的一个例子是:
1 2 3 4 5 6 7 8 9 | <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" android:insetTop="@dimen/abc_edit_text_inset_top_material" android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"> <selector> <item android:drawable="@android:color/transparent"/> </selector> </inset> |
这是默认材料设计实现的稍微修改过的版本。
当应用时,它将使你的所有编辑文本删除整个应用程序的下划线,你不必手动将样式应用到每一个。
简单地使用这个
1 | editText.setBackgroundColor(Color.TRANSPARENT); |
您还可以为EditText定义样式,以便可以共同重新组合所有属性。如果需要多个编辑文本,而这些文本需要具有
将代码放在res/values/styles.xml中
1
2
3
4
5 <style name="MyEditTextStyle" parent="@android:style/TextAppearance.Widget.EditText">
<item name="android:background">@color/transparence</item> //NO UNDERBAR
<item name="android:maxLines">1</item>
<item name="android:height">28dp</item> //COMMON HEIGHT
</style>
之后你只需要在你的编辑文本中调用它
1 2 3 4 5 6 7 8 9 10 | <EditText android:id="@+id/edit1" style="@style/MyEditTextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/edit2" style="@style/MyEditTextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" /> |
程序性使用:
从
1 | android:background="@android:color/transparent" |
或
1 | android:background="@null" |
在我的例子中,
它不会删除默认填充,就在条下。
将背景设置为空
1 | android:background="@null" in your xml |
如果使用背景,则必须使用此标记'android:testcursordrawable="@null"'