Podkreślenie EditText poniżej właściwości text


108

Chciałbym zmienić niebieski kolor pod tekstem edycji, nie wiem, jaka to właściwość.

Próbowałem użyć innego koloru tła, ale to nie zadziałało.

Załączam obrazek poniżej:

wprowadź opis obrazu tutaj


To jest tło dla EditText dostępnego na określonym poziomie API / telefonie. Innymi słowy, jeśli Twoja aplikacja działa na innym telefonie, możesz zobaczyć inne tło.
Sherif elKhatib

utworzyć niestandardowe tło
edittext

1
Możliwe powielenie poprzedniego wątku. Sprawdź to stackoverflow.com/a/4585750/1129468
gokhanakkurt

Użyj poniższego fragmentu kodu i daj mi znać, czy działa, czy nie.
InnocentKiller

Odpowiedzi:


90

W rzeczywistości dość łatwo jest programowo ustawić kolor podkreślenia tekstu EditText (tylko jeden wiersz kodu).

Aby ustawić kolor:

editText.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);

Aby usunąć kolor:

editText.getBackground().clearColorFilter();

Uwaga: kiedy EditText ma fokus , ustawiony kolor nie będzie obowiązywał, zamiast tego będzie miał kolor ostrości.

Dokumentacja API:

Do rysowania # setColorFilter

Do rysowania # clearColorFilter


4
Działa również na platformie Xamarin dla systemu Android, w niestandardowym module renderującym OnElementChanged możesz to zrobićControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk

@DavidConlisk które przeskakujesz Renderer? Próbuję wymyślić, jak to działa dla paska wyszukiwania.
Nick N.

@NickN. Używałem tego do selektora, więc zastąpiłem PickerRenderer. Powinien działać z dowolnym rendererem, który najbardziej Ci odpowiada (w teorii!)
David Conlisk,

1
Myślę, że powinien, ale problem może polegać na tym, że SearchBarRenderernie jest to typ EditText. Nie mogę tego zmusić do pracy.
Nick N.

85

Użyj android:backgroundTint=""w swoim EditTextukładzie XML.

Dla api <21 możesz wtedy użyć AppCompatEditTextbiblioteki wsparciaapp:backgroundTint=""


14
Działa to obecnie tylko w api 21 i nowszych. brak wsparcia wstecznego.
John Shelley

2
To zdecydowanie najprostsze i najbardziej zwięzłe rozwiązanie.
Igor Ganapolsky

@JohnShelley zobacz moją odpowiedź poniżej , działa ona w wersjach wcześniejszych niż Lollipop i nowszych .
Sufian

3
android:background="@null"dla urządzeń z api <21.
Hammad Nasir

4
Aby ten atrybut działał w interfejsach API poniżej 21 lat, należy użyć przestrzeni nazw app (xmlns: app = " schemas.android.com/apk/res-auto" ) zamiast androida.
Andrei K.

38

Musisz użyć innego obrazu tła, a nie koloru, dla każdego stanu EditText(fokus, włączony, aktywowany).

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

W powyższej witrynie możesz pobrać obrazy z wielu komponentów w motywie Holo. Po prostu wybierz „EditText” i żądany kolor. Możesz zobaczyć podgląd u dołu strony.

Pobierz plik .zip i skopiuj i wklej zasoby do projektu (obrazy i XML).

jeśli twój XML ma nazwę: apptheme_edit_text_holo_light.xml (lub coś podobnego):

  1. Przejdź do pliku XML „styles.xml” i dodaj EditTextstyl niestandardowy :

    <style name="EditTextCustomHolo" parent="android:Widget.EditText">
       <item name="android:background">@drawable/apptheme_edit_text_holo_light</item>
       <item name="android:textColor">#ffffff</item>
    </style>
  2. Po prostu zrób to w swoim EditText:

    <EditText
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="@style/EditTextCustomHolo"/>

I to wszystko, mam nadzieję, że ci pomoże.


24

Działa to dobrze dla starej i nowej wersji Androida (działa dobrze nawet z API 10!).

Zdefiniuj ten styl w styles.xml:

<style name="EditText.Login" parent="Widget.AppCompat.EditText">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorHint">@android:color/darker_gray</item>
    <item name="colorAccent">@color/blue</item>
    <item name="colorControlNormal">@color/blue</item>
    <item name="colorControlActivated">@color/blue</item>
</style>

A teraz w swoim XML ustaw to jako motyw i styl ( styl do ustawienia textColori motyw, aby ustawić wszystkie inne rzeczy):

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    style="@style/EditText.Login"
    android:theme="@style/EditText.Login"/>

Edytować

To rozwiązanie powoduje niewielką usterkę interfejsu użytkownika w nowszych wersjach Androida (Lollipop lub Marshmallow i nowszych), w której uchwyty wyboru są podkreślone.

Ta kwestia jest omawiana w tym wątku . (Nie próbowałem osobiście tego rozwiązania)


Świetna odpowiedź, dzięki. Użycie parent = "Widget.AppCompat.EditText" zamiast parent = "android: Widget.EditText" rozwiązało mój główny problem.
cfl

1
Myślę, że masz na myśli, że to działa Lollipop (21) i wyżej, ponieważ otrzymuję ostrzeżenia, że ​​to nie jest niższe niż 21
Mark O'Sullivan

@ MarkO'Sullivan nie, to działa dla wersji pre-Lollipop i wszystkich innych. Przetestowałem to na API 10 i działa dobrze. Wklej pełny błąd i miejsce, w którym się wyświetla.
Sufian

Skoncentrowany tekst edycji nadal miał dla mnie kolor podstawowy, więc musiałem zastosować to podejście: stackoverflow.com/a/36543554/2413303
EpicPandaForce

18

można zmienić Podkreślenie z EditText kolorze podając je w styles.xml . W motywie aplikacji styles.xml dodaj następujące elementy.

<item name="android:textColorSecondary">@color/primary_text_color</item> 

Jak wskazała ana w sekcji komentarzy

  <item name="android:colorControlActivated">@color/black</item>

ustawienie tego w stylu motywu działa dobrze w przypadku zmiany koloru podkreślenia edittext.


3
Zauważ, że android:textColorSecondaryjest używany do określenia koloru strzałki wstecz i DrawerLayoutikony hamburgera na pasku akcji.
Bianca Daniciuc

7
Skończyło się na używaniu <item name="colorControlNormal">@color/edittext_underline_color</item>zamiast textColorSecondary z powodu problemu z kolorowaniem paska nawigacji.
Bianca Daniciuc

14

Musisz więc utworzyć nowy plik .xml w swoim folderze do rysowania.

W tym pliku wklej ten kod:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item
    android:bottom="8dp"
    android:left="-3dp"
    android:right="-3dp"
    android:top="-3dp">
    <shape android:shape="rectangle">
     <stroke
       android:width="1dp"
       android:color="@color/white"/>
     </shape>
   </item>
</layer-list>

A w swoim EditText ustaw

android:background="@drawable/your_drawable"

Możesz grać z rysowanym XML, ustawiać rogi, wyściółki itp.


1
jest to prawdopodobnie lepsze rozwiązanie, biorąc pod uwagę, że umożliwia pełne dostosowanie EditText bez wpływu na inne komponenty w stylu lub układzie
mutable2112

z tego co nie rozumiem, możesz ustawić tło edittext na białe
rmanalo

Przeszukałem wszystkie rozwiązania, które znalazłem, było to jedyne działające dla mnie przy użyciu komponentów Android Material.
barney.balazs

9

W stylu aplikacji zdefiniuj właściwość colorAccent . Tutaj znajdziesz przykład

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/action_bar</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/action_bar</item>
</style>

5

Możesz programowo zmienić kolor EditText, używając tej linii kodu w prosty sposób:

edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));


1
Działa jak urok: D
Taslim Oseni

1

Użyj poniższego kodu, aby zmienić kolor tła obramowania tekstu edycji.

Utwórz nowy plik XML pod rysunkiem.

abc.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#00000000" />
    <stroke android:width="1dip" android:color="#ffffff" />
</shape>

i dodaj go jako tło edytowanego tekstu

android:background="@drawable/abc"

wspomniałem, że próbowałem powyżej ustawić kolor tła. to nie zadziałało.
AndroidEnthusiast

1

Aby zmienić kolor dolnej linii, możesz użyć tego w motywie aplikacji:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#ffe100</item>
    <item name="colorControlHighlight">#ffe100</item>
</style>

Aby zmienić kolor pływającej etykiety, napisz następujący motyw:

<style name="TextAppearence.App.TextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">#4ffd04[![enter image description here][1]][1]</item>
</style>

i użyj tego motywu w swoim układzie:

 <android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout">

    <EditText
        android:id="@+id/edtTxtFirstName_CompleteProfileOneActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:capitalize="characters"
        android:hint="User Name"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:singleLine="true"
        android:textColor="@android:color/white" />

</android.support.design.widget.TextInputLayout>

wprowadź opis obrazu tutaj


Skoncentrowany tekst edycji nadal miał dla mnie kolor podstawowy, więc musiałem zastosować następujące podejście: stackoverflow.com/a/36543554/2413303
EpicPandaForce

1

Możesz to zrobić za pomocą AppCompatEditText i selektora kolorów:

            <androidx.appcompat.widget.AppCompatEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:backgroundTint="@color/selector_edittext_underline" />

selector_edittext_underline.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/focused_color" 
          android:state_focused="true" />
    <item android:color="@color/hint_color" />
</selector>

0

Jeśli nie musisz obsługiwać urządzeń z API <21, użyj backgroundHint w formacie xml, na przykład:

 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Task Name"
            android:ems="10"
            android:id="@+id/task_name"
            android:layout_marginBottom="15dp"
            android:textAlignment="center"
            android:textColor="@android:color/white"

            android:textColorLink="@color/blue"
            android:textColorHint="@color/blue"
            android:backgroundTint="@color/lighter_blue" />

Aby uzyskać lepsze wsparcie i rezerwy, użyj rozwiązania @Akariuz. backgroundHint jest najbardziej bezbolesnym rozwiązaniem, ale nie jest kompatybilne wstecz, w zależności od twoich wymagań.


0

zmień colorAccentkolor, którego potrzebujesz, aby ustawić ten kolor colorAccenti uruchom, aby uzyskać wynik


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.