如何在EditText中隐藏下划线


496

如何隐藏EditText底部栏(在提示行的末尾带有小衬线)?

可能有一种更好的方式来做我想做的:我有一个带有EditText的布局。通常,在用户可以点击它并开始输入或编辑文本的地方,它显示得很好。

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

作为权宜之计,我将通过删除EditText并替换为TextView来实现此目的。我认为这将达到预期的结果,但是似乎通过a回绕是一种昂贵的方法,可以通过更改属性来轻松完成某件事。


Answers:


1052

您可以将设置EditText为具有自定义透明可绘制对象,也可以仅使用

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

要么

android:background="@null"

或以编程方式

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

7
正如haogen所说,最好的答案是制作一个自定义可绘制对象。从用于普通EditText字段的9补丁开始。对其进行修改,以去除下划线和其他不需要的图形。这样,修改后的EditText将具有与普通EditText字段相同的页边距和整体外观。如果仅将背景设置为null,则将失去边距。
佩里·哈特曼

124
使用这个:android:background="@android:color/transparent"
dd619

3
如果我已经有其他颜色的背景,比如灰色,在这种情况下如何删除下划线/下划线怎么办?
Narendra Singh

6
在Android 19中,使用android:background="@android:color/transparent"会引起相同的利润损失问题...在任何地方创建此类自定义可绘制对象的示例都有吗?
Anti Earth

2
我们如何在Java中以编程方式进行操作?
jagdish '16

100

将背景设置为空。

android:background="@null"

2
与background =“#00000000”相同。真的不行。
佩里·哈特曼

14
这对我有用,但android:background="@android:color/transparent由于@null害怕,我最终还是这样做了。
迪克·卢卡斯

3
@理查德为什么会@null害怕?
Michael

@null表示不存在背景。如果我们指定background =“#00000000”,它将以alpha值“ 0”绘制白色背景。
Vinayak V Naik

2
“ @null”也隐藏了闪烁的光标,而“ @android:color / transparent”则没有。
卢卡斯·诺瓦克

37

您可以将EditTextbackgroundTint值设置为特定的颜色。如果设置透明颜色,下划线应消失。

android:backgroundTint="@color/Transparent"

<color name="Transparent">#00000000</color>

但是你可以用这个Api v21(Lollipop)或更高


这比改变整个视图的背景要好得多(正如其他答案所暗示的那样)
Alex Semeniuk

26

请设置您的edittext背景为

android:background="#00000000"

会的。


3
它将完成一些工作,但不能正常工作。如果仅删除背景,那么您还将损失字段周围的边距-它们是默认背景的一部分。正确的解决方案是替换@ ha1ogen建议的根本没有底线的不同背景
Peri Hartman

1
如何以编程方式撤消此操作
Tushar Narang

23

您可以使用setBackgroundResource以下程序进行编程:

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

我不知道为什么,但是不起作用。生产线仍然存在
Syed Hissaan '18

15

我要做的是创建一个Shape绘制并将其设置为背景:

<?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>

注意:实际上,我为firelds 使用@dimen@color值,但是为了清楚起见,我在这里简化了形状文件。


1
这也是一个非常好的选择。这是设置自定义可绘制对象的一种变体。
佩里·哈特曼

15

使用任一属性:

android:background="@null"

要么

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

为我工作以隐藏EditText的下划线。

但是,请注意,这会导致我围绕着TextInputLayout的间距问题 EditText


1
间距问题来自错误布局。为了解决该问题,将TextInputLayout的errorEnabled属性设置为false app:errorEnabled =“ false”
Ulbo,

11

这是一种隐藏它而不破坏默认填充的方法:

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)
}

用法:

editText.setViewBackgroundWithoutResettingPadding(null)

更新:

如果发现自己总是传递null,则可以在方法中将其编码(然后还可以重载EditText本身)

fun EditText.removeUnderline() {
    val paddingBottom = this.paddingBottom
    val paddingStart = ViewCompat.getPaddingStart(this)
    val paddingEnd = ViewCompat.getPaddingEnd(this)
    val paddingTop = this.paddingTop
    ViewCompat.setBackground(this, null)
    ViewCompat.setPaddingRelative(this, paddingStart, paddingTop, paddingEnd, paddingBottom)
}

// usage:
editText.removeUnderline()

这个答案是完美的,应该接受。它可以删除背景而无需删除默认填充。
Pankaj Kumar

6

您还必须设置一个minWidth,否则,如果文本为空,光标将消失。

        <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"
            />

5

就我而言,我使用自定义背景来编辑文本,因此将背景设置为@null或将色调设置为透明不是我的解决方案,所以我玩了一个小技巧,对我来说非常好,我只是设置了

android:inputType="textVisiblePassword"

它可以很好地完成工作。.它不是最佳解决方案,但可以工作


1
我喜欢将它与透明背景结合使用,因为它会在键入时隐藏显示在文本下方的条形图-我想要的只是文本,没有装饰。
19Craig

1
这个答案是唯一对我有用的答案,因为我的edittext框是通过编程方式创建的,并且每个框都有不同的背景色,因此背景不能为空并且依赖于父级背景色
Sharone Lev


4

如果希望此方法影响EditText的所有实例以及从其继承的任何类,则应在主题中设置属性editTextBackground的值。

  <item name="android:editTextBackground">@drawable/bg_no_underline</item>

我使用的可绘制对象的示例是:

<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>

这是默认材料设计实现的略微修改版本。

应用后,它将使您所有的EditText都在整个应用程序中删除下划线,并且您不必手动将样式应用于每个样式。


4

我有这样的东西非常有用:

generalEditText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);

其中generalEditText是我的EditText,白色是:

<color name="white">#ffffff</color>

这不会删除填充,您的EditText将保持原样。仅底部的行将被删除。有时这样做更有用。

如果使用android:background="@null"尽可能多的建议,则会丢失填充,EditText会变小。至少是我的情况。

需要注意的一点是,如果将background设置为null并尝试我在上面提供的Java代码,则您的应用在执行后将立即崩溃。(因为它有背景,但它为空。)这很明显,但我认为指出这一点很重要。



3

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

然后不仅移除了背景,而且视图仍然具有根据默认背景计算出的填充。所以由于某种原因,延迟的null设置不能清除前一个bg的填充。视图上的填充为左/上/右4dp,下13dp(来自仿真器级别21)。

在所有API级别上可能不会有相同的最终结果,所以要当心!有人告诉我,如果您对此进行测试并认为可靠。(还要注意,由于原始内容中存在下划线,因此底部填充会突出显示。因此,您可能需要在XML中对其进行更改,或者在将其加载到相等的顶部之后在代码中对其进行重置...


2

您还可以为editText定义一个STYLE,以便可以重新组合所有公共属性。如果您必须多次编辑需要具有该行为的文本,这将非常强大

将代码放在res / values / styles.xml中

<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>

之后,您只需要在您的editText中调用它

<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

以编程方式使用: editText.setBackground(null)

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




0

将背景设置为空

android:background="@null" in your xml 

0

就我而言,editText.setBackgroundResource(R.color.transparent);是最好的。

它不会删除默认填充,仅在bar下。

R.color.transparent = #00000000


0

如果使用背景,则必须使用此标签

android:testCursorDrawable="@null" 

0

要保留边距和背景色,请使用:

background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <padding
        android:bottom="10dp"
        android:left="4dp"
        android:right="8dp"
        android:top="10dp" />

    <solid android:color="@android:color/transparent" />

</shape>

编辑文字:

<androidx.appcompat.widget.AppCompatEditText
    android:id="@+id/none_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:inputType="text"
    android:text="First Name And Last Name"
    android:textSize="18sp" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.