Удалить подчеркивание из TextInputEditText

У меня есть экран Android, который принимает электронную почту от пользователя. Ниже приведен фрагмент кода, я хочу удалить подчеркивание, которое появляется под текстом.

<com.google.android.material.textfield.TextInputLayout
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_margin = "8dp"
    android:hint = "@string/email"
    android:textColorHint = "@color/blueBackground"
    app:boxBackgroundColor = "@color/input_background"
    app:boxCornerRadiusBottomEnd = "20dp"
    app:boxCornerRadiusBottomStart = "20dp"
    app:boxCornerRadiusTopEnd = "20dp"
    app:boxCornerRadiusTopStart = "20dp"
    app:endIconMode = "clear_text"
    app:endIconTint = "@color/blueBackground"
    app:hintTextColor = "@color/blueBackground">

    <com.google.android.material.textfield.TextInputEditText
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:textColor = "@color/blueBackground"
        android:textSize = "18sp"
        android:layout_margin = "8dp" />

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

Я пробовал android:background = "@null" и

<item name = "colorControlNormal">@android:color/transparent</item> <item name = "colorControlActivated">@android:color/transparent</item>

Но это не работает.

Удалить подчеркивание из TextInputEditText

Также вы можете попробовать app:boxStrokeWidth = "0dp".

Shahrad Elahi 30.04.2021 13:26

В моем случае было достаточно добавить android:background = "@android:color/transparent"

Constantine Kurbatov 22.01.2022 17:58
33
2
25 944
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

Попробуйте установить фон на @null или @android:color/transparent

Как упоминалось в вопросе, я пробовал, но это не сработало.

Sagar Jogadia 16.07.2019 21:08
Ответ принят как подходящий

Похоже, что библиотека Material Components рисует собственное подчеркивание с помощью app:boxStrokeColor. Этот атрибут — ColorStateList, поэтому вам необходимо создать ресурс списка состояний цвета, в котором цвета всех состояний установлены прозрачными. Итак, вы хотите создать новый файл res/color/filename.xml:

<?xml version = "1.0" encoding = "utf-8"?>
<selector xmlns:android = "http://schemas.android.com/apk/res/android">
    <item
        android:color = "@android:color/transparent"
        android:state_pressed = "true"
        android:state_focused = "true"
        android:state_selected = "true"
        android:state_checkable = "true"
        android:state_checked = "true"
        android:state_enabled = "true"
        android:state_window_focused = "true" />
</selector>

и установите для атрибута app:boxStrokeColor значение @color/filename.

Однако это оставило меня с черным подчеркиванием, которое по-прежнему не отвечает на android:background=@null или <item name = "colorControl*">@android:color/transparent</item>.


TL;DR

Быстрое исправление: если вы установите TextInputLayout, обведенный с помощью style = "@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox", поле выглядит почти так же, но подчеркивание исчезнет. Чтобы удалить обводку, просто установите для атрибута app:boxStrokeColor значение @null.

Установка фона TextInputLayout на рисуемый, а один из TextInputEditText на прозрачный удаляет подчеркивание:

<com.google.android.material.textfield.TextInputLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:layout_margin = "8dp"
        android:hint = "@string/email"
        android:background = "@drawable/blue_drawable"
        app:endIconMode = "clear_text"
        app:endIconTint = "@color/black"
        app:hintTextColor = "@color/black">

    <com.google.android.material.textfield.TextInputEditText
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:textColor = "@color/black"
            android:background = "@android:color/transparent"
            android:textSize = "18sp"
            android:layout_margin = "8dp" />

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

blue_drawable.xml

<shape xmlns:android = "http://schemas.android.com/apk/res/android"
    android:shape = "rectangle">
<corners android:radius = "20dp"/>
<solid android:color = "@android:color/holo_blue_bright"/></shape>

Установка android:background = "@android:color/transparent" на TextInputEditText удаляет синий фон из TextInputLayout и, следовательно, не решает мою проблему.

Sagar Jogadia 17.07.2019 01:54

Я исправил это, добавив рисование в качестве фона TextInputLayout.

no_name 17.07.2019 05:26

Создайте селектор в res/drawable

<?xml version = "1.0" encoding = "utf-8"?>
<selector xmlns:android = "http://schemas.android.com/apk/res/android">
    <item android:alpha = "0.01" android:color = "?attr/background" android:state_focused = "true"/>
    <item android:alpha = "0.01" android:color = "?attr/background" android:state_hovered = "true"/>
    <item android:alpha = "0.01" android:color = "?attr/background" android:state_enabled = "false"/>
    <item android:alpha = "0.01" android:color = "?attr/background"/>
</selector>

Здесь задний план - любой цвет, близкий к вашему фону.

Способ 1 Затем установите его на свой TextInputLayout:

<com.google.android.material.textfield.TextInputLayout
...
  app:boxStrokeColor = "@drawable/text_input_selector"
...

Способ 2, стили корыта:

стили.xml:

<style name = "vm_textFilledBox" parent = "Widget.MaterialComponents.TextInputLayout.FilledBox">
        <item name = "boxStrokeColor">@drawable/text_input_selector</item>
</style>
 <com.google.android.material.textfield.TextInputLayout
...
    style = "@style/vm_textFilledBox"

Сделайте свой собственный TextInputLayout таким

package com.google.android.material.textfield

import android.content.Context
import android.util.AttributeSet
class TextInputLayoutWithoutUnderline @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TextInputLayout(context, attrs, defStyleAttr) {

    override fun updateEditTextBackground() {
        // XXX don't call super on purpose
    }

}
<style name = "Theme.MyApp" parent = "Theme.MaterialComponents.Light.NoActionBar">
    <item name = "textInputStyle">@style/Widget.MyApp.TextInputLayout</item>
</style>

<style name = "Widget.MyApp.TextInputLayout" parent = "Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name = "boxStrokeWidth">0dp</item>
    <item name = "boxStrokeWidthFocused">0dp</item>
</style>

Простой способ;

app:boxBackgroundMode = "filled"
app:boxStrokeWidth = "0dp"

app:boxBackgroundMode = "none" в родительском TextInputLayout

Правильный ответ я также получил этим

Dhaval Solanki 27.05.2021 12:51

Он удаляет базовую линию, но добавляет дополнительный верхний отступ.

PRANAV SINGH 25.06.2021 20:00

Добавление этой строки в TextInputLayout работает для меня:

app:boxStrokeWidth = "0dp"

ОБНОВИТЬ

Внутри каталога color res добавьте файл et_box_color.xml и добавьте в него следующие строки:

<selector xmlns:android = "http://schemas.android.com/apk/res/android" >
   <item android:color = "@color/transparent"
        android:state_pressed = "true"
        android:state_focused = "true"
        android:state_selected = "true"
        android:state_checkable = "true"
        android:state_checked = "true"
        android:state_enabled = "true"
        android:state_window_focused = "true"/>
</selector>

Теперь добавьте текст редактирования вашего материала, как показано ниже:

<com.google.android.material.textfield.TextInputLayout
                android:id = "@+id/textInputLayout"
                android:layout_width = "match_parent"
                android:layout_height = "wrap_content"
                android:background = "@drawable/border"
                app:boxStrokeColor = "@color/et_box_color"
                app:layout_constraintEnd_toEndOf = "parent"
                app:layout_constraintStart_toStartOf = "parent"
                app:layout_constraintTop_toBottomOf = "@+id/llBank">

                <com.google.android.material.textfield.TextInputEditText
                    android:id = "@+id/etAmount"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginBottom = "1dp"
                    android:background = "#00FFFFFF"
                    android:gravity = "center"
                    android:hint = "Amount"
                    android:imeOptions = "actionDone"
                    android:inputType = "numberDecimal" />

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

Я добавил фон, чтобы сделать границу TextInputLayout, удалите фон TextInputLayout, если он вам не нужен. Фон TextInputEditText будет необходим, чтобы сделать фон прозрачным.

If you want app:boxBackgroundMode with filled and without underline than this will work

<item name = "boxStrokeWidthFocused">0dp</item>
<item name = "boxStrokeWidth">0dp</item>

Если вы хотите использовать заполненное поле, то приведенный ниже код отлично работает для меня.

app:boxStrokeWidth = "0dp"
app:boxStrokeWidthFocused = "0dp"

добавьте вышеуказанные строки во входной макет.

Установите boxBackgroundMode в TextInputLayout. Это простой и правильный способ убрать подчеркивание в TextInputLayout.

<com.google.android.material.textfield.TextInputLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        app:boxBackgroundMode = "none" >

        <com.google.android.material.textfield.TextInputEditText
            android:id = "@+id/inputEditText"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"/>

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

Рабочий раствор

Annie 11.08.2021 12:35

Примечание. Этот ответ об удалении подчеркивания при вводе TextInputEditText

После 6 часов поисков о том, как убрать подчеркивание с TextInputEditText, я нашел однострочное решение, просто поместите android:inputType = "text|textNoSuggestions" внутри вашего TextInputEditText.

Теперь я не получаю подчеркивания при вводе TextInputEditText

Решение очень простое, вам нужно добавить эту строку в TextInputLayout: style = "@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" и это будет исправлено.

Вам просто нужно написать приложение:boxStrokeWidth="0dp" и приложение:boxStrokeWidthFocused="0dp" атрибуты для компонента TextInputLayout.

надо писать так:

<com.google.android.material.textfield.TextInputLayout
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_margin = "8dp"
    app:boxStrokeWidth = "0dp"
    app:boxStrokeWidthFocused = "0dp"
    android:hint = "@string/email"
    android:textColorHint = "@color/blueBackground"
    app:boxBackgroundColor = "@color/input_background"
    app:boxCornerRadiusBottomEnd = "20dp"
    app:boxCornerRadiusBottomStart = "20dp"
    app:boxCornerRadiusTopEnd = "20dp"
    app:boxCornerRadiusTopStart = "20dp"
    app:endIconMode = "clear_text"
    app:endIconTint = "@color/blueBackground"
    app:hintTextColor = "@color/blueBackground">

<com.google.android.material.textfield.TextInputEditText
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:textColor = "@color/blueBackground"
    android:textSize = "18sp"
    android:layout_margin = "8dp" />

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

Другие вопросы по теме