Comment changer la couleur des lignes dans EditText

203

Je crée un EditText dans mon fichier xml de mise en page

Mais je veux changer la ligne de couleur dans EditText de Holo en (par exemple) rouge. Comment cela peut-il être fait?

entrez la description de l'image ici

Alex
la source

Réponses:

310

C'est le meilleur outil que vous pouvez utiliser pour toutes les vues et son GRATUIT grâce à @ Jérôme Van Der Linden .

Le générateur de couleurs Android Holo vous permet de créer facilement des composants Android tels que EditTextou spinner avec vos propres couleurs pour votre application Android. Il générera tous les neuf actifs de correctifs nécessaires, ainsi que les styles et les dessins XML associés que vous pouvez copier directement dans votre projet.

http://android-holo-colors.com/

MISE À JOUR 1

Ce domaine semble expiré mais le projet est une source ouverte que vous pouvez trouver ici

https://github.com/jeromevdl/android-holo-colors

essayez-le

cette image mise en arrière-plan de EditText

android:background="@drawable/textfield_activated"

entrez la description de l'image ici


MISE À JOUR 2

Pour API 21 ou supérieur, vous pouvez utiliser android:backgroundTint

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Underline color change"
        android:backgroundTint="@android:color/holo_red_light" />

Update 3 Maintenant, nous avons avec le support arrièreAppCompatEditText

Remarque: Nous devons utiliser app: backgroundTint au lieu d' Android: backgroundTint

<android.support.v7.widget.AppCompatEditText
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:hint="Underline color change"
    app:backgroundTint="@color/blue_gray_light" />
MilapTank
la source
Le lien semble mort? Le logiciel est-il toujours disponible?
Codage John
1
@CodingJohn ce projet est open source, vous pouvez le trouver ici github.com/jeromevdl/android-holo-colors
MilapTank
et qui dit que nous devons utiliser "app: backgroundTint au lieu d'Android: backgroundTint" ??
user924
si vous voulez une compatibilité descendante, vous pouvez utiliser l'application: *** OW android: ***
MilapTank
203

Je n'aime pas les réponses précédentes. La meilleure solution consiste à utiliser:

<android.support.v7.widget.AppCompatEditText

      app:backgroundTint="@color/blue_gray_light" />

android:backgroundTintpour les EditTexttravaux uniquement sur API21 + . Pour cette raison, nous devons utiliser la bibliothèque de support et AppCompatEditText.

Remarque: nous devons utiliser app:backgroundTintau lieu deandroid:backgroundTint

Version AndroidX

<androidx.appcompat.widget.AppCompatEditText

      app:backgroundTint="@color/blue_gray_light" />

Mladen Rakonjac
la source
3
C'est la meilleure solution! Simple et fonctionne à tous les niveaux d'API. Merci!
Ivo Stoyanov
7
vous n'en avez pas besoin, si vous utilisez la bibliothèque appcompat, les EdtiTexts sont automatiquement transformés en AppCompatEditText et la teinte d'arrière-plan est appliquée.
stephane k.
Je pense que cela devrait être exactement une solution
Thuy Nguyen
Merci beaucoup. Cela a fonctionné pour API 16+. Meilleure solution.
André Luiz Reis
2
possible de définir l'application: backgroundTint par programme? Je pourrais trouver une méthode 'setBackgroundTint'
Sarath Nagesh
75

Vous pouvez également modifier rapidement la couleur de soulignement de l'EditText en teintant l'arrière-plan de l'EditText comme suit:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Something or Other"
            android:backgroundTint="@android:color/holo_green_light" />
Damian Esteves
la source
18
Fonctionne uniquement dans API 21 ou supérieur. Est-il possible de faire en sorte que cela fonctionne pour un niveau d'API moindre?
Vucko
Vérifiez la solution reVerse stackoverflow.com/questions/26574328/…
powder366
@ mladj0ni Cool, + 1j
Vucko
3
Pour les niveaux d'api inférieurs, utilisez uniquement "backgroundTint" au lieu de "android: backgroundTint" Crédits stackoverflow.com/a/29400711/1590911
Hasaan Ali
cela change la couleur d'arrière-plan entière, pas la couleur de la ligne
Code Wiget
29

pour l' API inférieure à 21, vous pouvez utiliser l'attribut de thème dans le EditText code ci-dessous dans le fichier de style

<style name="MyEditTextTheme">
    <item name="colorControlNormal">#FFFFFF</item>
    <item name="colorControlActivated">#FFFFFF</item>
    <item name="colorControlHighlight">#FFFFFF</item>
</style>

utiliser ce style en EditTexttant que

<EditText
    android:id="@+id/etPassword"
    android:layout_width="match_parent"
    android:layout_height="@dimen/user_input_field_height"
    android:layout_marginTop="40dp"
    android:hint="@string/password_hint"
    android:theme="@style/MyEditTextTheme"
    android:singleLine="true" />
Rahul
la source
savez-vous comment ajouter alpha / opacité au fichier de style? Comme s'il devait prendre la couleur normale avec une opacité et une fois qu'il a commencé à taper, il devrait prendre la couleur activée ou en surbrillance
ASN
1
@ANS pour cela, vous devez ajouter un écouteur d'observateur de texte et définir dynamiquement l'opacité dans la méthode "onTextChanged"
Rahul
Oh. Il ne peut donc pas être ajouté au fichier de style ou de sélection et doit être fait de manière dynamique?
ASN
L'opacité @ASN est ajoutée en couleur hexadécimale dans les deux premiers caractères 00-FF, par exemple: # A1FAFAFA
aimiliano
21

Par programme, vous pouvez essayer:

editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);
doctorram
la source
2
Meilleure réponse pour l'effet Xamarin.Forms
mister_giga
11

je pense que le meilleur moyen est par thème:

<style name="MyEditTextTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorControlNormal">@color/black</item>
        <item name="colorControlActivated">@color/action_blue</item>
        <item name="colorControlHighlight">@color/action_blue</item>
</style>

<style name="AddressBookStyle" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textSize">13sp</item>
     <item name="android:theme">@style/MyEditTextTheme</item>
</style>

<android.support.v7.widget.AppCompatEditText
            style="@style/AddressBookStyle"/>
j2emanue
la source
2
cela ne fonctionne pas pour moi avec une balise de style mais avec Android: balise de thème
aimiliano
9

Pour modifier la couleur de soulignement d'Edittext:

Si vous souhaitez que l'application entière partage ce style, vous pouvez procéder de la manière suivante.

(1) allez dans le fichier styles.xml. Votre AppTheme qui hérite du parent de Theme.AppCompat.Light.DarkActionBar (dans mon cas) sera le parent de base de tous les fichiers de style dans votre application. Changez le nom de celui-ci en «AppBaseTheme». Créez un autre style juste en dessous qui porte le nom d'AppTheme et hérite d'AppBaseTheme que vous venez de modifier. Il ressemblera à ceci:

<!-- Base application theme. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <!--see http://www.google.com/design/spec/style/color.html#color-color-palette-->
    <item name="colorPrimary">@color/material_brown_500</item>
    <item name="colorPrimaryDark">@color/material_brown_700</item>
    <item name="colorAccent">@color/flamingo</item>

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Customize your theme here. -->
</style>

Puis changez le "colorAccent" en quelle que soit la couleur que vous voulez que votre couleur de ligne EditText soit.

(2) Si vous avez d'autres dossiers de valeurs avec style.xml, cette étape est très importante. Parce que ce fichier héritera de votre précédent fichier xml parent. Par exemple, j'ai values-19 / styles.xml. Ceci est spécifiquement pour Kitkat et supérieur. Changez son parent en AppBaseTheme et assurez-vous de vous débarrasser de «colorAccent» afin qu'il ne remplace pas la couleur du parent. Vous devez également conserver les éléments spécifiques à la version 19. Ensuite, cela ressemblera à ceci.

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>
Suhyun Kim
la source
9

C'est assez simple (Requis: API 21 minimum) ...

  1. Accédez à votre xml et sélectionnez le champ EditText
  2. Sur le côté droit, vous pouvez voir la fenêtre «Attributs». Sélectionnez «Afficher tous les attributs»
  3. Recherchez simplement 'teinte'
  4. Et ajoutez / changez le 'backgroundTint' en un hex de couleur désirée (disons # FF0000)

entrez la description de l'image ici

entrez la description de l'image ici

Continuez à coder ........ :)

Krishna Raj Salim
la source
2
API 21 minimum.
Maihan Nijat
La modification de la teinte d'arrière-plan modifie le CONTEXTE. Cette réponse est incorrecte
Code Wiget
6

La couleur de la ligne est définie par EditTextla propriété background de. Pour le changer, vous devez changer le android:backgrounddans le fichier de mise en page.

Je dois noter que ce style est obtenu en utilisant un dessinable à 9 patchs. Si vous regardez dans le SDK, vous pouvez voir que l'arrière-plan du EditTextest cette image:

textfield_activated_holo_light.9.png

Pour le changer, vous pouvez l'ouvrir dans un programme de manipulation d'image et le colorier dans la couleur souhaitée. Enregistrez-le sous bg_edit_text.9.png, puis placez-le dans votre dossier dessinable. Maintenant, vous pouvez l'appliquer comme arrière-plan à votre EditTextgoût:

android:background="@drawable/bg_edit_text"
Egor Neliuba
la source
5

Vous pouvez changer la couleur de EditText par programme en utilisant simplement cette ligne de code:edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));

Matin Ashtiani
la source
Voilà ce que je recherche! Thx
Jiratchaya Intaragumhaeng
4

L'arrière-plan des widgets dépend du niveau de l'API .

ALTERNATIVE 1

Vous pouvez fournir une image personnalisée à votre EditTextarrière - plan en

android:background="@drawable/custom_editText"

Votre image devrait ressembler à ceci. Il vous donnera l'effet souhaité.

entrez la description de l'image ici

ALTERNATIVE 2

Définissez ce xml sur votre EditTextattribut d'arrière - plan.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
 android:shape="rectangle" android:padding="10dp">
<solid android:color="#4C000000"/>
    <corners android:bottomRightRadius="5dp"
             android:bottomLeftRadius="5dp"
             android:topLeftRadius="5dp"
             android:topRightRadius="5dp"/>
</shape>

Cela aura le même aspect et la même sensation que votre EditTextsur chaque API.

CodeWarrior
la source
Je suis intéressé par la version 4.0 et supérieure. Autrement dit, je veux juste changer la couleur de la ligne quand il est actif EditText
Alex
4

Vous pouvez changer la couleur en teintant l'arrière-plan <EditText android:backgroundTint="@color/red"/>


la source
1
cela ne fonctionne que pour api> 21, vous devez suivre la réponse @Rahul pour tous les apis ou ajouter différentes mises en page pour api> 21 dans le dossier layout-21
aimiliano
4

drawable / bg_edittext.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

    <item
        android:left="-2dp"
        android:right="-2dp"
        android:top="-2dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1dp"
                android:color="@color/colorDivider" />
        </shape>
    </item>
</layer-list>

Définir sur EditText

<android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_edittext"/>
Ketan Ramani
la source
3

Utilisez cette méthode .. et modifiez-la selon les noms de vos vues. Ce code fonctionne très bien.

 private boolean validateMobilenumber() {
            if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
                input_layout_mobilenumber.setErrorEnabled(true);
                input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
               // requestFocus(mobilenumber);
                return false;
            } else {
                input_layout_mobilenumber.setError(null);
                input_layout_mobilenumber.setErrorEnabled(false);
                mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
            }
Shahid Sarwar
la source
2

Si vous voulez une ligne plate, vous pouvez le faire facilement avec xml. Voici l'exemple xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#6A9A3A"/>
        </shape>
    </item>
</layer-list>

Remplacez la forme par un sélecteur si vous souhaitez fournir une largeur et une couleur différentes pour l'edittext focalisé.

Sfseyhan
la source
1
avec la conception matérielle, il crée un rectangle, avec une ligne de fond plus large
Filip Zymek
2

La meilleure approche consiste à utiliser un attribut AppCompatEditTextwith backgroundTintd' appespace de noms. c'est à dire

    <android.support.v7.widget.AppCompatEditText
    android:layout_width="match_parent"      
    app:backgroundTint="YOUR COLOR"
    android:layout_height="wrap_content" />

lorsque nous l'utilisons, android:backgroundTintcela ne fonctionne que dans API21 ou plus, mais app:backgroundTintfonctionne à tous les niveaux d'API.

Ankush
la source
1

Utilisez android: propriété d'arrière-plan pour cet edittext. Passez-y votre image de dossier dessinable. Par exemple,

android:background="@drawable/abc.png"
VVB
la source
1
 <EditText
        android:id="@+id/et_password_tlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:textColorHint="#9e9e9e"
        android:backgroundTint="#000"
        android:singleLine="true"
        android:drawableTint="#FF4081"
        android:paddingTop="25dp"
        android:textColor="#000"
        android:paddingBottom="5dp"
        android:inputType="textPassword"/>

    <View
        android:id="@+id/UnderLine"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_below="@+id/et_password_tlay"
        android:layout_centerHorizontal="true"
        android:background="#03f94e" />

** c'est à faire avec vue **

Singupurapu prudhvi raj
la source
1

Essayez la méthode suivante, elle convertira la couleur de la ligne du bas de EditText, lorsqu'elle est utilisée comme propriété d'arrière-plan.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="@dimen/spacing_neg"
        android:right="@dimen/spacing_neg"
        android:top="@dimen/spacing_neg">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="@dimen/spacing_1"
                android:color="@android:color/black" />
        </shape>
    </item>
</layer-list>
ashishdhiman2007
la source
0

Cela peut simplement être fait en incluant cet android:theme="@style/AppTheme.AppBarOverlayattribut dans votre editText et en l'ajoutant <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />à vos styles

nivla360
la source