我如何隐藏EditText下划线(提示行与小衬线在结束)?

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

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

作为一种权宜之计,我将通过删除EditText并替换TextView来实现这一点。我认为这将带来预期的结果,但它似乎是一种迂回的昂贵的方式来完成一些本应该通过改变属性来轻松完成的事情。


当前回答

如果您希望这影响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删除整个应用程序的下划线,你不必手动应用每个样式。

其他回答

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

然后,不仅背景被删除,而且视图仍然有从默认背景计算的填充。所以出于某种原因,延迟空设置不清除填充从以前的bg..?视图上的填充是左/上/右4dp,下13dp(来自模拟器级别21)。

在所有API级别上可能不会有相同的最终结果,所以要小心!谁能告诉我你是否测试过这个方法是否可靠。(还要注意,底部填充突出是因为原来的下划线。所以你可能想要在XML中改变它,或者在代码中重置它,在它加载到equal top…

我所做的是创建一个Shape drawable,并将其设置为背景:

<?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值,但为了清晰起见,我简化了形状文件。

如果你正在使用TextInputLayout中的EditText,使用app:boxBackgroundMode="none",如下所示:

<com.google.android.material.textfield.TextInputLayout
    app:boxBackgroundMode="none"
    ...
    >

    <EditText
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</com.google.android.material.textfield.TextInputLayout>

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

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变得更小。至少,这是我的案子。

一个小提示是,如果你设置后台为空,并尝试我上面提供的java代码,你的应用程序将在执行后立即崩溃。(因为它得到了背景,但它是空的。)这可能是显而易见的,但我认为指出这一点很重要。

android:inputType="textVisiblePassword|textMultiLine"
android:background="@android:color/transparent"

...这不是最佳解决方案,但它有效。