Jak zmienić kolor linii w EditText


203

Tworzę EditText w moim pliku XML układu

Ale chcę zmienić linię kolorów w EditText z Holo na (na przykład) czerwony. Jak można to zrobić?

wprowadź opis zdjęcia tutaj

Odpowiedzi:


310

Jest to najlepsze narzędzie, którego możesz użyć do wszystkich widoków, i ZA DARMO wiele dzięki @ Jérôme Van Der Linden .

Generator kolorów Holo dla Androida pozwala w łatwy sposób tworzyć komponenty dla Androida, takie jak EditTextlub pokrętło z własnymi kolorami dla aplikacji na Androida. Wygeneruje wszystkie niezbędne dziewięć łatek plus powiązane pliki XML i style, które można skopiować bezpośrednio do projektu.

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

AKTUALIZACJA 1

Ta domena wydaje się wygasła, ale projekt jest otwartym źródłem, które można znaleźć tutaj

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

Spróbuj

ten obraz został umieszczony w tle EditText

android:background="@drawable/textfield_activated"

wprowadź opis zdjęcia tutaj


AKTUALIZACJA 2

W przypadku interfejsu API 21 lub nowszego można użyć 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" />

Aktualizacja 3 teraz Mamy wsparcie z powrotemAppCompatEditText

Uwaga: Musimy użyć app: backgroundTint zamiast Androida: 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" />

Link wydaje się martwy? Czy oprogramowanie jest nadal dostępne?
Kodowanie John

1
@CodingJohn ten projekt jest dostępny na licencji open source, można go znaleźć tutaj github.com/jeromevdl/android-holo-colours
MilapTank,

i kto mówi, że musimy użyć „app: backgroundTint zamiast Androida: backgroundTint”?
user924

jeśli chcesz kompatybilności wstecznej , możesz użyć aplikacji: *** OW android: ***
MilapTank

202

Nie lubię poprzednich odpowiedzi. Najlepszym rozwiązaniem jest użycie:

<android.support.v7.widget.AppCompatEditText

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

android:backgroundTintdla EditTextdziała tylko na API21 + . Z tego powodu musimy korzystać z biblioteki wsparcia i AppCompatEditText.

Uwaga: musimy użyć app:backgroundTintzamiastandroid:backgroundTint

Wersja AndroidX

<androidx.appcompat.widget.AppCompatEditText

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


3
To najlepsze rozwiązanie! Prosty i działa na wszystkich poziomach API. Dzięki!
Ivo Stoyanov

7
nie potrzebujesz tego, jeśli korzystasz z biblioteki appcompat, EdtiTexts są automatycznie przekształcane w AppCompatEditText i stosowany jest odcień tła.
Stephane K.

Myślę, że to powinno być dokładnie rozwiązanie
Thuy Nguyen,

Dziękuję Ci bardzo. Działa dla API 16+. Najlepsze rozwiązanie
André Luiz Reis

2
można ustawić programowo: backgroundTint? Mogłem znaleźć metodę „setBackgroundTint”
Sarath Nagesh

75

Możesz także szybko zmienić kolor podkreślenia EditText poprzez przyciemnienie tła EditText w następujący sposób:

<EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Something or Other"
            android:backgroundTint="@android:color/holo_green_light" />

18
Działa tylko w API 21 lub nowszym. Jakiś sposób, aby to działało na mniejszym poziomie API?
Vucko,

Sprawdź rozwiązanie reVerse stackoverflow.com/questions/26574328/...
powder366,

@ mladj0ni Cool, + 1d
Vucko

3
W przypadku mniejszych poziomów interfejsu API użyj tylko „backgroundTint” zamiast „android: backgroundTint” Kredyty stackoverflow.com/a/29400711/1590911
Hasaan Ali

zmienia to cały kolor tła, a nie kolor linii
Code Wiget

29

dla interfejsu API poniżej 21 możesz użyć atrybutu kompozycji w EditText kodzie poniżej kodu do pliku stylu

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

użyj tego stylu EditTextjako

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

Czy wiesz, jak dodać alfa / nieprzezroczystość do pliku stylu? Jak powinien mieć normalny kolor z nieprzezroczystością, a kiedy zaczną pisać, powinien przyjąć kolor aktywowany lub podświetlony
ASN,

1
@ANS, w tym celu należy dodać nasłuchiwanie obserwatora tekstu i dynamicznie ustawić krycie w metodzie „onTextChanged”
Rahul,

O. Więc nie można go dodać do pliku stylizacji lub selektora i należy to zrobić dynamicznie?
ASN

@ Nieprzezroczystość @ASN jest dodawana w kolorze heksadecymalnym w pierwszych dwóch znakach 00-FF, na przykład: # A1FAFAFA
aimiliano

21

Programowo możesz spróbować:

editText.getBackground().mutate().setColorFilter(getResources().getColor(android.R.color.holo_red_light), PorterDuff.Mode.SRC_ATOP);

2
Najlepsza odpowiedź na efekt
Xamarin.Forms

11

myślę, że najlepszym sposobem jest temat:

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

2
to nie działa dla mnie z tagiem stylu, ale z
Androidem

9

Aby zmienić kolor podkreślenia Edittext:

Jeśli chcesz, aby cała aplikacja współdzieliła ten styl, możesz wykonać następujące czynności.

(1) przejdź do pliku styles.xml. Twój AppTheme, który dziedziczy element nadrzędny Theme.AppCompat.Light.DarkActionBar (w moim przypadku) będzie podstawowym elementem nadrzędnym wszystkich plików stylów w Twojej aplikacji. Zmień jego nazwę na „AppBaseTheme”. Utwórz inny styl pod nim, który ma nazwę AppTheme i dziedziczy po AppBaseTheme, który właśnie edytowałeś. Będzie to wyglądać następująco:

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

Następnie zmień „colorAccent” na dowolny kolor, jaki ma mieć kolor linii EditText.

(2) Jeśli masz inne foldery wartości ze stylem.xml, ten krok jest bardzo ważny. Ponieważ plik ten odziedziczy po poprzednim nadrzędnym pliku XML. Na przykład mam wartości-19 / styles.xml. Dotyczy to w szczególności KitKata i nowszych wersji. Zmień jego element nadrzędny na AppBaseTheme i upewnij się, że pozbyłeś się „colorAccent”, aby nie zastępował koloru elementu nadrzędnego. Musisz także zachować elementy specyficzne dla wersji 19. Wtedy będzie to wyglądać tak.

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

9

Jest to dość proste (wymagane: minimum API 21) ...

  1. Przejdź do pliku xml i wybierz pole EditText
  2. Po prawej stronie widać okno „Atrybuty”. Wybierz „Wyświetl wszystkie atrybuty”
  3. Po prostu wyszukaj „odcień”
  4. I dodaj / zmień „backgroundTint” na pożądany heks koloru (powiedzmy # FF0000)

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Keep Coding ........ :)


2
Minimalne API 21.
Maihan Nijat

Zmiana odcienia tła zmienia TŁO. Ta odpowiedź jest niepoprawna
Code Wiget

6

Kolor linii jest określony przez EditTextwłaściwość tła. Aby to zmienić, należy zmienić android:backgroundplik układu.

Powinienem zauważyć, że ten styl został osiągnięty dzięki zastosowaniu 9-łatowej szuflady. Jeśli spojrzysz na SDK, zobaczysz, że tłem EditTextjest ten obraz:

textfield_activated_holo_light.9.png

Aby to zmienić, możesz otworzyć go w programie do obróbki zdjęć i pokolorować go w żądanym kolorze. Zapisz go jako, bg_edit_text.9.pnga następnie włóż do folderu, który możesz wyciągnąć. Teraz możesz zastosować go jako tło dla swojego EditTextpodobnego:

android:background="@drawable/bg_edit_text"


4

Tło widżetów zależy od poziomu interfejsu API .

ALTERNATYWNY 1

Możesz podać niestandardowy obraz jako EditTexttło

android:background="@drawable/custom_editText"

Twój obraz powinien wyglądać mniej więcej tak. Daje pożądany efekt.

wprowadź opis zdjęcia tutaj

ALTERNATYWNY 2

Ustaw ten plik XML na EditTextatrybut tła.

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

Będzie to miało taki sam wygląd i działanie EditTextna każdym interfejsie API.


Jestem zainteresowany wersją 4.0 i nowszą. To znaczy, chcę tylko zmienić kolor linii, gdy jest aktywny EditText
Alex

4

Możesz zmienić kolor poprzez przyciemnienie tła <EditText android:backgroundTint="@color/red"/>


1
to działa tylko dla api> 21 należy postępować odpowiedź @Rahul dla wszystkich apis lub dodać różne układy dla api> 21 w układzie 21-katalog
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>

Ustaw na EditText

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

3

Użyj tej metody ... i zmodyfikuj ją zgodnie z nazwami widoków. Ten kod działa świetnie.

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

2

Jeśli potrzebujesz płaskiej linii, możesz to łatwo zrobić za pomocą xml. Oto przykład 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>

Zastąp kształt selektorem, jeśli chcesz ustawić inną szerokość i kolor dla zogniskowanego tekstu edycyjnego.


1
z materiałowym wzorem tworzy prostokąt, z szerszą dolną linią
Filip Zymek

2

Najlepszym rozwiązaniem jest, aby używać AppCompatEditTextz backgroundTintatrybutem appnazw. to znaczy

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

kiedy android:backgroundTintgo używamy , będzie działał tylko w API21 lub więcej, ale app:backgroundTintdziała na wszystkich poziomach API, które robi Twoja aplikacja.


1

Użyj właściwości android: background dla tego tekstu edycji. Prześlij do niego obraz folderu z możliwością rysowania. Na przykład,

android:background="@drawable/abc.png"

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

** to robi z widokiem **


1

Wypróbuj następujący sposób, gdy zostanie użyty jako właściwość tła, przekonwertuje kolor dolnej linii EditText.

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

0

Można to po prostu zrobić, włączając to android:theme="@style/AppTheme.AppBarOverlayjako atrybut w editText i dodaj to <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />do swoich stylów

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.