J'ai un écran Android qui prend les e-mails de l'utilisateur. Ci-dessous se trouve l'extrait de code, je souhaite supprimer le soulignement qui apparaît sous le texte.
<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>
J'ai essayé android:background="@null"
et
<item name="colorControlNormal">@android:color/transparent</item> <item name="colorControlActivated">@android:color/transparent</item>
Mais ça ne fonctionne pas.
12 Réponses :
Essayez de définir l'arrière-plan sur @null
ou @android:color/transparent
Comme mentionné dans la question, je l'ai essayé mais cela n'a pas fonctionné
Il semble que la bibliothèque de composants matériels dessine son propre soulignement à l'aide de app:boxStrokeColor
. Cet attribut est un ColorStateList
, vous devez donc créer une ressource de liste d'états de couleurs dans laquelle les couleurs de tous les états sont définies sur transparent. Donc, fondamentalement, vous voulez créer un nouveau fichier 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>
et définissez l'attribut app:boxStrokeColor
sur @color/filename
.
Cependant, cela m'a laissé avec un soulignement noir qui ne répond toujours pas à android:background=@null
ou <item name="colorControl*">@android:color/transparent</item>
.
Quickfix: si vous définissez le TextInputLayout
décrit en utilisant style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
, la boîte a presque la même apparence, mais le soulignement a disparu. Pour supprimer le trait, définissez simplement l'attribut app:boxStrokeColor
sur @null
.
Définir l'arrière-plan de TextInputLayout sur un dessinable et celui de TextInputEditText sur transparent supprime le soulignement:
<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>
blue_drawable.xml
<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>
La définition de android:background="@android:color/transparent"
sur TextInputEditText
supprime l'arrière-plan bleu de TextInputLayout
et ne résout donc pas mon problème
J'ai corrigé cela en ajoutant un dessinable en arrière-plan du TextInputLayout
Créer un sélecteur à res / drawable
<com.google.android.material.textfield.TextInputLayout ... style="@style/vm_textFilledBox"
fond ici - n'importe quelle couleur proche de votre arrière-plan.
Way 1 Ensuite, réglez-le sur votre TextInputLayout
:
<style name="vm_textFilledBox" parent="Widget.MaterialComponents.TextInputLayout.FilledBox"> <item name="boxStrokeColor">@drawable/text_input_selector</item> </style>
Voie 2 , styles creux:
styles.xml :
<com.google.android.material.textfield.TextInputLayout ... app:boxStrokeColor="@drawable/text_input_selector" ...
<?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>
Créez votre TextInputLayout personnalisé comme ceci
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>
Moyen facile;
app:boxBackgroundMode="filled" app:boxStrokeWidth="0dp"
app:boxBackgroundMode="none"
dans TextInputLayout
parent
L'ajout de cette ligne sur TextInputLayout
fonctionne pour moi:
<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>
MISE À JOUR
Dans le répertoire color res, ajoutez le fichier et_box_color.xml et ajoutez les lignes ci-dessous à l'intérieur:
<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>
Maintenant, ajoutez votre texte d'édition de matériel comme ci-dessous:
app:boxStrokeWidth="0dp"
J'ai ajouté un arrière-plan pour créer une bordure de TextInputLayout, supprimez l'arrière-plan de TextInputLayout si vous n'en avez pas besoin. L'arrière-plan de TextInputEditText sera nécessaire pour rendre l'arrière-plan transparent.
Si vous voulez app: boxBackgroundMode avec rempli et sans soulignement, cela fonctionnera
<item name="boxStrokeWidthFocused">0dp</item> <item name="boxStrokeWidth">0dp</item>
Si vous souhaitez utiliser la case remplie, le code ci-dessous fonctionne parfaitement pour moi.
app:boxStrokeWidth="0dp" app:boxStrokeWidthFocused="0dp"
ajoutez les lignes ci-dessus dans la mise en page d'entrée.
Veuillez définir boxBackgroundMode dans TextInputLayout. C'est le moyen simple et approprié de supprimer le soulignement dans 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>