关于android:如何在EditText中隐藏下划线

How to hide underbar in EditText

如何隐藏EditText下栏(结尾有小衬线的提示行)?

也许有更好的方法来做我想做的事情:我有一个带有EditText的布局。通常,在用户可以点击它并开始输入或编辑文本的地方,这会显示良好。

但是,有时我希望使用相同的布局(简化其他逻辑)以只读方式显示相同的数据。我希望演示文稿是相似的-它应该有相同的高度和字体,但没有底线。

作为一个停止间隙度量,我将通过删除EditText并替换一个TextView来实现这一点。我认为这会产生期望的结果,但这似乎是一种迂回的昂贵方法,通过改变属性来做一些应该很容易做的事情。


您可以将EditText设置为具有自定义透明可拖动或仅使用

1
android:background="@android:color/transparent"

1
android:background="@null"


将背景设置为空。

1
android:background="@null"


请将EditText背景设置为

android:background="#00000000"

它会起作用的。


可以将EditTextbackgroundTint值设置为特定颜色。如果设置透明颜色,则底线应该消失。

android:backgroundTint="@color/Transparent"

#00000000

但你可以在Api v21(Lollipop)或更高版本中使用它


您可以使用setBackgroundResource以编程方式完成:

1
editText.setBackgroundResource(android.R.color.transparent);

使用任一属性:

1
android:background="@null"

1
android:background="@android:color/transparent"

为我隐藏编辑文本的下划线而工作。

但是,请注意,它会导致我围绕EditText的textinputlayout出现间距问题。


以下是隐藏它的方法,而不破坏默认填充:

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>

注:我实际使用了@dimen@color值作为firelds,但为了清晰起见,我简化了这里的形状文件。


您还必须设置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将保持原样。只删除底部的行。有时这样做更有用。

如果您使用android:background="@null"作为许多建议,您将丢失填充,edittext将变小。至少是我的情况。

如果你设置背景NULL并尝试上面提供的Java代码,你的应用程序在执行它后就会崩溃。(因为它得到了背景,但它是空的。)这可能很明显,但我认为指出它很重要。


我发现了最奇怪的东西!如果使用数据绑定将其设置为nullandroid:background="@{null}"

然后,不仅删除了背景,而且视图还有根据默认背景计算的填充。因此,出于某种原因,延迟的空设置没有从以前的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" />

程序性使用:editText.setBackground(null)

xml使用:android:background="@null"


1
android:background="@android:color/transparent"

1
android:background="@null"

在我的例子中,editText.setBackgroundResource(R.color.transparent);是最好的。

它不会删除默认填充,就在条下。

R.color.transparent = #00000000


将背景设置为空

1
android:background="@null" in your xml


如果使用背景,则必须使用此标记'android:testcursordrawable="@null"'