Comment puis-je masquer la barre de caractères EditText (la ligne Prompt avec de 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 s’affiche correctement lorsque l’utilisateur peut taper dessus et commencer à saisir ou à modifier du texte.
Parfois, cependant, j'aimerais utiliser la même présentation (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 les barres de soulignement.
Pour pallier à cette lacune, je vais implémenter cela en supprimant le EditText et en le remplaçant par un TextView. Je pense que cela donnera les résultats souhaités, mais cela semble être un moyen détourné coûteux de faire quelque chose qui devrait être facile à faire en modifiant les attributs.
Vous pouvez définir le EditText
pour avoir un dessin transparent transparent ou simplement utiliser
Android:background="@Android:color/transparent"
ou
Android:background="@null"
Définissez l'arrière-plan sur null.
Android:background="@null"
Vous pouvez définir la valeur EditText
de backgroundTint
avec une couleur spécifique. Si vous définissez une couleur transparente, les barres de soulignement devraient disparaître.
Android:backgroundTint="@color/Transparent"
<color name="Transparent">#00000000</color>
Mais vous pouvez utiliser ceci dans Api v21(Lollipop)
ou supérieur
Veuillez définir votre arrière-plan edittext comme
Android:background="#00000000"
Ça va marcher.
Vous pouvez le faire par programme en utilisant setBackgroundResource
:
editText.setBackgroundResource(Android.R.color.transparent);
Utiliser l'une ou l'autre propriété:
Android:background="@null"
OR
Android:background="@Android:color/transparent"
a travaillé pour moi pour cacher le soulignement de l’EditText.
Cependant, notez que cela provoque alors un problème d'espacement avec TextInputLayout que j'ai entourée avec EditText
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)
Ce que j'ai fait était de créer une forme pouvant être dessinée et de la définir comme arrière-plan:
<?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>
Remarque: J'ai en fait utilisé les valeurs @dimen
et @color
pour les champs, mais j'ai simplifié le fichier de forme ici pour plus de clarté.
Vous devez également définir une largeur minimale, sinon le curseur disparaîtra si le texte est vide.
<EditText
Android:id="@+id/et_card_view_list_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:minWidth="30dp"
Android:layout_weight="1"
Android:inputType="text"
Android:text="Name"
Android:background="@Android:color/transparent"
/>
si votre texte d'édition a déjà un arrière-plan, vous pouvez utiliser ce qui suit.
Android:textCursorDrawable="@null"
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:
<color name="white">#ffffff</color>
Cela ne supprimera pas le remplissage et votre EditText restera 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"
, nombreux sont ceux qui vous ont suggéré de perdre le remplissage et que 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 cela donne un arrière-plan mais c'est nul). C'est peut-être évident mais je pense que le signaler est important.
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'attribut, editTextBackground.
<item name="Android:editTextBackground">@drawable/bg_no_underline</item>
Un exemple de dessin que j'utilise est:
<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>
Ceci est une version légèrement modifiée de ce que l’implémentation de conception matérielle par défaut est.
Une fois appliqué, tout votre EditText supprime le soulignement dans l'application et vous n'avez pas à appliquer le style à chacun manuellement.
J'ai découvert la chose la plus curieuse! Si vous le définissez sur null
à l'aide de la liaison de données: Android:background="@{null}"
Alors non seulement l'arrière-plan est supprimé, mais la vue a toujours le remplissage calculé à partir de l'arrière-plan par défaut. Donc, pour une raison quelconque, le paramètre de valeur par défaut différé ne supprime pas le remplissage du bg précédent. Le remplissage de la vue est 4dp gauche/haut/droite, 13dp inférieur (à partir de l'émulateur niveau 21).
Le résultat final peut ne pas être identique pour tous les niveaux d’API, alors méfiez-vous! Quelqu'un me dit si vous testez ceci et que vous le trouvez fiable. (Notez également que le remplissage du bas est visible à cause du soulignement qui était dans l'original. Donc, vous voudrez probablement le changer dans le XML, ou le réinitialiser dans le code après l'avoir chargé égal à top ...
simplement utiliser ceci
editText.setBackgroundColor(Color.TRANSPARENT);
Vous pouvez également définir un STYLE pour votre editText afin de regrouper toutes les propriétés en commun. Il est très puissant si vous devez modifier plusieurs fois le texte qui doit avoir le comportement
Mettez le code dans res/values / styles.xml
<style name="MyEditTextStyle" parent="@Android:style/TextAppearance.Widget.EditText"> <item name="Android:background">@color/transparence</item> //NO UNDERBAR <item name="Android:maxLines">1</item> <item name="Android:height">28dp</item> //COMMON HEIGHT </style>
Après cela, il vous suffit de l'appeler dans votre editText
<EditText
Android:id="@+id/edit1"
style="@style/MyEditTextStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
<EditText
Android:id="@+id/edit2"
style="@style/MyEditTextStyle"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
Utiliser par programme: editText.setBackground(null)
De xml
utilisez: Android:background="@null"
Android:background="@Android:color/transparent"
Ou
Android:background="@null"
Dans mon cas, editText.setBackgroundResource(R.color.transparent);
est le meilleur.
Il ne supprime pas le remplissage par défaut, juste en dessous de la barre.
R.color.transparent = #00000000
Définir l'arrière-plan sur null
Android:background="@null" in your xml
si vous utilisez l’arrière-plan, vous devez utiliser la balise 'Android: testCursorDrawable = "@ null"'