web-dev-qa-db-fra.com

Comment cacher les barres de soulignement dans EditText

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.

404
Peri Hartman

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

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

ou

Android:background="@null"
872
ha1ogen

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

Android:background="@null"
96
Vinayak V Naik

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

25
Yasin Kaçmaz

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

Android:background="#00000000"

Ça va marcher.

24
kishore kumar

Vous pouvez le faire par programme en utilisant setBackgroundResource:

editText.setBackgroundResource(Android.R.color.transparent);
19
Roberto

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

14
AjayCodes

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)
10
android developer

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é.

9
Paul LeBeau

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"
            />
5
live-love

si votre texte d'édition a déjà un arrière-plan, vous pouvez utiliser ce qui suit.

Android:textCursorDrawable="@null"
4
AKASH WANGALWAR

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.

4
bengongon97

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.

3
kingargyle

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 ...

3
androidguy

simplement utiliser ceci

 editText.setBackgroundColor(Color.TRANSPARENT);
2
prashant kute

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" />
2

Utiliser par programme: editText.setBackground(null)

De xml utilisez: Android:background="@null"

1
Shubham Kaushik
Android:background="@Android:color/transparent"

Ou

Android:background="@null"
1

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

0
HJ Song

Définir l'arrière-plan sur null

Android:background="@null" in your xml 
0
Jocelin

si vous utilisez l’arrière-plan, vous devez utiliser la balise 'Android: testCursorDrawable = "@ null"'

0
ATIQ UR REHMAN