Comment cacher sous barre dans EditText

Comment puis-je masquer la barre d’outils EditText (la ligne d’invite avec des petits empattements aux extrémités)?

Il y a peut-être une meilleure façon de faire ce que je veux: j’ai une mise en page avec un EditText. Normalement, cela affiche bien l’endroit où l’utilisateur peut appuyer dessus et commencer à entrer ou à modifier du texte.

Parfois, cependant, j’aimerais utiliser la même mise en page (simplifie une autre logique) pour afficher les mêmes données en lecture seule. Je veux que la présentation soit similaire – elle devrait avoir la même hauteur et la même police, mais pas la barre inférieure.

En guise de mesure d’arrêt, je vais implémenter cela en supprimant le EditText et en substituant un TextView. Je pense que cela donnera les résultats escomptés, mais cela semble être un moyen détourné de faire quelque chose qui devrait être facile à faire en modifiant les atsortingbuts.

Vous pouvez définir le EditText pour avoir un dessin ou transparent transparent personnalisé

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

ou

 android:background="@null" 

Définissez l’arrière-plan sur null.

 android:background="@null" 

Veuillez définir votre arrière-plan edittext comme

android:background="#00000000"

Ça va marcher.

Vous pouvez définir la valeur backgroundTint EditText sur une couleur spécifique. Si vous définissez une couleur transparente, la barre inférieure devrait disparaître.

android:backgroundTint="@color/Transparent"

#00000000

Mais vous pouvez l’utiliser dans Api v21(Lollipop) ou supérieur

Vous pouvez le faire par programmation en utilisant setBackgroundResource :

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

En utilisant l’une ou l’autre des propriétés:

 android:background="@null" 

OU

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

a travaillé pour moi pour cacher le soulignement du EditText.

Toutefois, notez qu’il provoque alors un problème d’espacement avec le TextInputLayout que j’ai entouré le EditText

Ce que j’ai fait a été de créer un dessin de forme et de le définir comme arrière-plan:

      

Remarque: j’ai utilisé les valeurs @dimen et @color pour les firelds, mais j’ai simplifié le fichier de forme pour plus de clarté.

Voici un moyen de le cacher, sans ruiner le remplissage par défaut:

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

usage:

 editText.setViewBackgroundWithoutResettingPadding(null) 

Vous devez également définir une minWidth, sinon le curseur disparaîtra si le texte est vide.

   

J’ai découvert la chose la plus curieuse! Si vous le définissez sur null utilisant la liaison de données: android:background="@{null}"

Ensuite, non seulement l’arrière-plan est supprimé, mais la vue contient toujours le remplissage calculé à partir de l’arrière-plan par défaut. Donc, pour une raison quelconque, le paramètre NULL différé ne supprime pas le remplissage de la bg précédente ..? Le remplissage sur la vue est de 4dp gauche / haut / droit, et de 13dp en bas (à partir du niveau d’émulateur 21).

Peut ne pas avoir le même résultat final sur tous les niveaux d’API, alors méfiez-vous! Quelqu’un me dit si vous testez cela et le trouvez fiable. (Notez également que ce padding bas ressort en raison de ce soulignement qui était dans l’original. Donc, vous voudrez probablement le modifier dans le XML, ou le réinitialiser dans le code après l’avoir chargé au même niveau …

Si votre texte de modification a déjà un arrière-plan, vous pouvez utiliser les éléments suivants.

 android:textCursorDrawable="@null" 

Vous pouvez également définir un STYLE pour votre editText afin de pouvoir regrouper toutes les propriétés en commun. Il est très puissant si vous devez modifier plusieurs textes nécessitant un comportement

Placez le code dans res / values ​​/ styles.xml

  

Après cela, il vous suffit de l’appeler dans votre editText

    

J’ai quelque chose comme ça qui est très très utile:

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

où generalEditText est mon EditText et la couleur blanche est:

 #ffffff 

Cela ne supprimera pas le remplissage et votre EditText restra tel quel. Seule la ligne en bas sera supprimée. Parfois, il est plus utile de le faire comme ça.

Si vous utilisez android:background="@null" , beaucoup ont suggéré de perdre le remplissage et EditText devient plus petit. Au moins, c’était mon cas.

Une petite remarque est que si vous définissez background null et essayez le code java que j’ai fourni ci-dessus, votre application se plantera juste après son exécution. (parce que ça prend l’arrière plan mais c’est nul.) Cela peut être évident mais je pense qu’il est important de le signaler.

Si vous souhaitez que cela affecte toutes les instances de EditText et toute classe qui en hérite, vous devez définir dans votre thème la valeur de l’atsortingbut editTextBackground.

  @drawable/bg_no_underline 

Un exemple du dessinable que j’utilise est:

      

C’est une version légèrement modifiée de l’implémentation par défaut de la conception de matériau.

Lorsque cette option est appliquée, tous vos EditText suppriment le soulignement dans l’application, et vous n’avez pas à appliquer le style à chacun d’eux manuellement.