У меня есть экран 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>
Но это не работает.
В моем случае было достаточно добавить android:background = "@android:color/transparent"
Попробуйте установить фон на @null или @android:color/transparent
Как упоминалось в вопросе, я пробовал, но это не сработало.
Похоже, что библиотека 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>.
Быстрое исправление: если вы установите 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 и, следовательно, не решает мою проблему.
Я исправил это, добавив рисование в качестве фона TextInputLayout.
Создайте селектор в 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
Правильный ответ я также получил этим
Он удаляет базовую линию, но добавляет дополнительный верхний отступ.
Добавление этой строки в 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>
Рабочий раствор
Примечание. Этот ответ об удалении подчеркивания при вводе 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>
Также вы можете попробовать
app:boxStrokeWidth = "0dp".