Jak zmienić kolor pływającej etykiety TextInputLayout

210

W odniesieniu do nowego TextInputLayoutwydanego przez Google, jak zmienić kolor tekstu pływającej etykiety?

Ustawianie colorControlNormal, colorControlActivated, colorControlHighLightw stylach nie pomaga.

Oto co mam teraz:

Oto co mam teraz

Johanson
źródło
8
Jak zmienić kolor linii na czerwony?
Vlad
6
@ Vlad161 colorAccent
Kyle Horkley
@ Vlad161 może wyjaśnić, gdzie byś ustawił colorAccent? Zmieniłem niestandardowy styl colorAccentna czarny, a linia nadal odzwierciedlałaby to, co mam colorControlNormalw głównym stylu.
ElliotM
2
Znalazłem dobry przykład tutaj
Chintan Rathod
Sprawdź poniższy link. Ustawia inny kolor na podpowiedź i podkreśl kolor: https://stackoverflow.com/a/45349177/3392323
SAndroidD

Odpowiedzi:

358

Wypróbuj poniższy kod To działa w normalnym stanie

 <android.support.design.widget.TextInputLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:theme="@style/TextLabel">

     <android.support.v7.widget.AppCompatEditText
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="Hiiiii"
         android:id="@+id/edit_id"/>

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

W kodzie TextLabel folderu stylów

 <style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/Color Name</item> 
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/Color Name</item>
    <item name="colorControlNormal">@color/Color Name</item>
    <item name="colorControlActivated">@color/Color Name</item>
 </style>

Ustawiony na główny motyw aplikacji, działa tylko Podświetl tylko stan

 <item name="colorAccent">@color/Color Name</item>

Aktualizacja:

UnsupportedOperationException: Nie można przekonwertować na kolor: typ = 0x2 w interfejsie API 16 lub niższym

Rozwiązanie

Aktualizacja:

Czy korzystasz z biblioteki komponentów materiałów?

Możesz dodać poniższe linie do głównego motywu

 <item name="colorPrimary">@color/your_color</item> // Activated State
 <item name="colorOnSurface">@color/your_color</item> // Normal State

czy też chcesz różne kolory w stanie noraml i stanie aktywowanym oraz z dostosowaniem postępuj zgodnie z poniższym kodem

<style name="Widget.App.TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <item name="materialThemeOverlay">@style/ThemeOverlay.App.TextInputLayout</item>
    <item name="shapeAppearance">@style/ShapeAppearance.App.SmallComponent</item> //Changes the Shape Apperance
    <!--<item name="hintTextColor">?attr/colorOnSurface</item>-->   //When you added this line it will applies only one color in normal and activate state i.e colorOnSurface color
</style>

<style name="ThemeOverlay.App.TextInputLayout" parent="">
    <item name="colorPrimary">@color/colorPrimaryDark</item>  //Activated color
    <item name="colorOnSurface">@color/colorPrimary</item>    //Normal color
    <item name="colorError">@color/colorPrimary</item>        //Error color

    //Text Appearance styles
    <item name="textAppearanceSubtitle1">@style/TextAppearance.App.Subtitle1</item>
    <item name="textAppearanceCaption">@style/TextAppearance.App.Caption</item>

    <!--Note: When setting a materialThemeOverlay on a custom TextInputLayout style, dont forget to set editTextStyle to either a @style/Widget.MaterialComponents.TextInputEditText.* style or to a custom one that inherits from that.
    The TextInputLayout styles set materialThemeOverlay that overrides editTextStyle with the specific TextInputEditText style needed. Therefore, you dont need to specify a style tag on the edit text.-->
    <item name="editTextStyle">@style/Widget.MaterialComponents.TextInputEditText.OutlinedBox</item>
</style>

<style name="TextAppearance.App.Subtitle1" parent="TextAppearance.MaterialComponents.Subtitle1">
    <item name="fontFamily">@font/your_font</item>
    <item name="android:fontFamily">@font/your_font</item>
</style>

<style name="TextAppearance.App.Caption" parent="TextAppearance.MaterialComponents.Caption">
    <item name="fontFamily">@font/your_font</item>
    <item name="android:fontFamily">@font/your_font</item>
</style>

<style name="ShapeAppearance.App.SmallComponent" parent="ShapeAppearance.MaterialComponents.SmallComponent">
    <item name="cornerFamily">cut</item>
    <item name="cornerSize">4dp</item>
</style>

Dodaj poniższy wiersz do głównego motywu, albo możesz ustawić styl na textinputlayout w swoim pliku xml

<item name="textInputStyle">@style/Widget.App.TextInputLayout</item>
Brahmam Yamani
źródło
6
Wow, pracuję nad tym już od około tygodnia - wróciłem do tego pytania kilka razy, właśnie odpowiedziałeś na wszystkie pytania, jakie kiedykolwiek miałem.
ElliotM
40
Aplikacja jest zepsuta po ustawieniu komunikatu o błędzie w TextInputLayout lub podczas edytowania widoku EditText:android.view.InflateException: Error inflating class TextView
Arvis
18
Ostrożnie, android:themewłączenie tego stylu TextInputLayoutpowoduje InflateExceptionawarie smartfonów ASUS Zen (i ewentualnie innych urządzeń).
friederbluemle
13
Cześć nj, przepraszam za to, nie wiem, dlaczego tak się dzieje, ale zmieniłem TextAppearance.AppCompat na ThemeOverlay.AppCompat.Light działa dobrze, nawet gdy używasz ustawionego błędu do textinputlayout
Brahmam Yamani
11
Ustawienie rodzica, który ThemeOverlay.AppCompat.Lightpomógł rozwiązać problem awarii na moim Zenfonie ASUS (@friederbluemle)
Łukasz Wiktor,
103
<style name="TextAppearance.App.TextInputLayout" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/red</item>
    <item name="android:textSize">14sp</item>
</style>

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColorHint="@color/gray"  //support 23.0.0
    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout" >

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint" />
</android.support.design.widget.TextInputLayout>
Kieł
źródło
16
Jest to to samo, co zaakceptowana odpowiedź, z wyjątkiem mylącej implikacji, że musisz użyć AppCompatEditText. AppCompatActivity automatycznie użyje AppCompatEditText dla instancji EditText, nie trzeba tego specjalnie używać.
Niall
4
Pierwszy wiersz kodu tuż po „<nazwa stylu” zawiera błąd ortograficzny. Uważam, że „... TextAppearence ...” powinno brzmieć „... TextAppearance ...”
AJW
android:textColorHint="@color/gray" //support 23.0.0uwidocznił mój kolor tekstu podpowiedzi (domyślnie kolor tekstu podpowiedzi był czarny, niezależnie od ustawionego koloru tekstu podpowiedzi, a jeśli tło jest czarne, tekst jest całkowicie ukryty
Rajaraman
70

Znajdź odpowiedź, użyj android.support.design:hintTextAppearanceatrybutu, aby ustawić własny wygląd pływającej etykiety.

Przykład:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:hintTextAppearance="@style/TextAppearance.AppCompat">

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/prompt_password"/>
</android.support.design.widget.TextInputLayout>
Johanson
źródło
Ładna płynna animacja. Dzięki
Joaquin Iurchuk
I dostać Namespace 'android.support.design' not bound. Jakieś sugestie?
Sunkas,
@Sunkas dodaj compile 'com.android.support:design:23.1.1'do pliku oceny aplikacji
Ahmed Mostafa
24

Nie trzeba używać android:theme="@style/TextInputLayoutTheme"do zmiany pływającego koloru etykiety, ponieważ wpłynie to na cały motyw małego TextView używanego jako etykieta. Zamiast tego możesz użyć app:hintTextAppearance="@style/TextInputLayout.HintText"gdzie:

<style name="TextInputLayout.HintText">
  <item name="android:textColor">?attr/colorPrimary</item>
  <item name="android:textSize">@dimen/text_tiny_size</item>
  ...
</style>

Daj mi znać, czy rozwiązanie działa :-)

cesards
źródło
22

Jak zmienić kolor tekstu pływającej etykiety?

Za pomocą biblioteki Material Components można dostosować TextInputLayoutkolor tekstu podpowiedzi za pomocą (wymaga wersji 1.1.0)

  • W układzie:

    • app:hintTextColor atrybut: kolor etykiety, gdy jest zwinięta, a pole tekstowe jest aktywne
    • android:textColorHint atrybut: kolor etykiety we wszystkich innych stanach pól tekstowych (takich jak spoczynkowe i wyłączone)
<com.google.android.material.textfield.TextInputLayout
     app:hintTextColor="@color/mycolor"
     android:textColorHint="@color/text_input_hint_selector"
     .../>
<style name="MyFilledBox" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name="hintTextColor">@color/mycolor</item>
    <item name="android:textColorHint">@color/text_input_hint_selector</item>
</style>

wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj

Domyślny selektor android:textColorHintto:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.6" android:color="?attr/colorOnSurface"/>
</selector>
Gabriele Mariotti
źródło
4

Ok, więc uznałem tę odpowiedź za bardzo pomocną i dziękuję wszystkim ludziom, którzy się do tego przyczynili. Ale żeby coś dodać. Przyjęta odpowiedź jest rzeczywiście poprawną odpowiedzią ... ALE ... w moim przypadku chciałem zaimplementować komunikat o błędzie pod EditTextwidżetem app:errorEnabled="true"i ta pojedyncza linia utrudniła mi życie. wydaje się, że to zastępuje motyw android.support.design.widget.TextInputLayout, który wybrałem , który ma inny kolor tekstu zdefiniowany przez android:textColorPrimary.

W końcu zdecydowałem się na zastosowanie koloru tekstu bezpośrednio do EditTextwidżetu. Mój kod wygląda mniej więcej tak:

styles.xml

<item name="colorPrimary">@color/my_yellow</item>
<item name="colorPrimaryDark">@color/my_yellow_dark</item>
<item name="colorAccent">@color/my_yellow_dark</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:textColorSecondary">@color/dark_gray</item>
<item name="android:windowBackground">@color/light_gray</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:textColorHint">@color/dark_gray</item>
<item name="android:colorControlNormal">@android:color/black</item>
<item name="android:colorControlActivated">@android:color/white</item>

I mój widget:

<android.support.design.widget.TextInputLayout
        android:id="@+id/log_in_layout_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:errorEnabled="true">

        <EditText
            android:id="@+id/log_in_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textColor="@android:color/black"
            android:ems="10"
            android:hint="@string/log_in_name"
            android:inputType="textPersonName" />
</android.support.design.widget.TextInputLayout>

Teraz wyświetla czarny kolor tekstu zamiast textColorPrimarybiałego.

Zoo
źródło
3

Sugeruję utworzenie motywu stylu dla TextInputLayout i zmianę tylko koloru akcentu. Ustaw element nadrzędny na podstawowy motyw aplikacji:

 <style name="MyTextInputLayout" parent="MyAppThemeBase">
     <item name="colorAccent">@color/colorPrimary</item>
 </style>

 <android.support.design.widget.TextInputLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:theme="@style/MyTextInputLayout">
Arvis
źródło
2

W najnowszej wersji biblioteki obsługi (23.0.0+) TextInputLayoutpobiera następujący atrybut w formacie XML w celu edycji koloru pływającej etykiety:android:textColorHint="@color/white"

spierce7
źródło
2

Zamiast odpowiedzi Brahmam Yamani wolę używać Widget.Design.TextInputLayout jako elementu nadrzędnego. Zapewnia to obecność wszystkich wymaganych elementów, nawet jeśli nie wszystkie zostaną nadpisane. W odpowiedzi Yamanisa aplikacja ulegnie awarii z nierozwiązywalnym zasobem, jeśli zostanie wywołane setErrorEnabled (true).

Po prostu zmień styl na następujący:

<style name="TextLabel" parent="Widget.Design.TextInputLayout">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/Color Name</item> 
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/Color Name</item>
    <item name="colorControlNormal">@color/Color Name</item>
    <item name="colorControlActivated">@color/Color Name</item>
 </style>
creaity
źródło
1
działa dobrze na Androidzie 4.3 i 7, bez błędów podczas korzystania z EditText.setError ()
Saul_programa
2

W moim przypadku dodałem to ” app:hintTextAppearance="@color/colorPrimaryDark"w widżecie TextInputLayout.

KoralReef
źródło
To nie działa. error: '#FFFFFF' is incompatible with attribute hintTextAppearance
Taslim Oseni
1

Aby zmienić kolor podpowiedzi i edytować tekst, podkreśl kolor: colorControlActivated

Aby zmienić kolor licznika znaków: textColorSecondary

Aby zmienić kolor komunikatu o błędzie: colorControlNormal

Aby zmienić odcień przycisku widoczności hasła: colorForeground

Aby uzyskać więcej informacji na temat TextInputLayout, przeczytaj http://www.zoftino.com/android-textinputlayout-tutorial

<style name="MyAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorControlActivated">#e91e63</item>
    <item name="android:colorForeground">#33691e</item>
    <item name="colorControlNormal">#f57f17</item>
    <item name="android:textColorSecondary">#673ab7</item>
</style>
Arnav Rao
źródło
1

Programowo możesz użyć:

/* Here you get int representation of an HTML color resources */
int yourColorWhenEnabled = ContextCompat.getColor(getContext(), R.color.your_color_enabled);
int yourColorWhenDisabled = ContextCompat.getColor(getContext(), R.color.your_color_disabled);

/* Here you get matrix of states, I suppose it is a matrix because using a matrix you can set the same color (you have an array of colors) for different states in the same array */
int[][] states = new int[][]{new int[]{android.R.attr.state_enabled}, new int[]{-android.R.attr.state_enabled}};

/* You pass a ColorStateList instance to "setDefaultHintTextColor" method, remember that you have a matrix for the states of the view and an array for the colors. So the color in position "colors[0x0]" will be used for every states inside the array in the same position inside the matrix "states", so in the array "states[0x0]". So you have "colors[pos] -> states[pos]", or "colors[pos] -> color used for every states inside the array of view states -> states[pos] */
myTextInputLayout.setDefaultHintTextColor(new ColorStateList(states, new int[]{yourColorWhenEnabled, yourColorWhenDisabled})

Wyjaśnienie:

Uzyskaj wartość koloru int z zasobu kolorów (sposób prezentacji kolorów rgb używanych przez Androida). Napisałem ColorEnabled, ale tak naprawdę powinno być, dla tej odpowiedzi ColorHintExpanded & ColorViewCollapsed. W każdym razie jest to kolor, który zobaczysz, gdy podpowiedź widoku „TextInputLayout” będzie w stanie rozwiniętym lub zwiniętym; ustawisz go, używając następnej tablicy w funkcji „setDefaultHintTextColor” widoku. Odwołanie: Odwołanie do TextInputLayout - wyszukaj na tej stronie metodę „setDefaultHintTextColor”, aby uzyskać więcej informacji

Patrząc na powyższe dokumenty, możesz zobaczyć, że funkcje ustawiają kolory dla rozwiniętej i zwiniętej wskazówki za pomocą ColorStateList.

Dokumenty ColorStateList

Aby utworzyć ColorStateList, najpierw utworzyłem macierz ze stanami, które chcę, w moim przypadku state_enabled & state_disabled (których w TextInputLayout jest równa podpowiedzi rozwiniętej i podpowiedzi zwiniętej [nie pamiętam, w jakiej kolejności lol, w każdym razie znalazłem ją tylko wykonuję test]). Następnie przekazuję konstruktorowi ColorStateList tablice z wartościami całkowitymi zasobów kolorów, kolory te mają zgodność z macierzą stanów (każdy element w tablicy kolorów odpowiada odpowiedniej tablicy w macierzy stanów w tej samej pozycji). Tak więc pierwszy element tablicy kolorów będzie użyty jako kolor dla każdego stanu w pierwszej tablicy macierzy stanów (w naszym przypadku tablica ma tylko 1 element: stan włączony = stan rozwinięty wskazówki dla TextInputLayut). Ostatnie stany rzeczy mają wartości dodatnie / ujemne, a ty masz tylko wartości dodatnie,

Mam nadzieję, że to jest pomocne. Pa, miłego kodowania (:

Z3R0
źródło
Wyjaśnienie? To tylko 2 metody: / ​​Tak czy inaczej, szybko je dodam.
Z3R0
Tylko cztery linijki z dużą ilością tekstu - wystarczy krótko wyjaśnić pojęcia, a wszyscy mają dobry powód, aby zostawić głosowanie :)
Nico Haase
1
Zrobione;) Mam nadzieję, że jest to właściwe i pomocne. Miłego kodowania: D
Z3R0
0

powinieneś tutaj zmienić kolor

<style name="Base.Theme.DesignDemo" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">#673AB7</item>
        <item name="colorPrimaryDark">#512DA8</item>
        <item name="colorAccent">#FF4081</item>
        <item name="android:windowBackground">@color/window_background</item>
    </style>
luttu android
źródło
0

Teraz po prostu używasz colorAccenti colorPrimarybędzie działać idealnie.

Kyle Horkley
źródło
4
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienia, zostaw komentarz pod postem.
Swati,
2
@Swati To jest odpowiedź na pytanie. Mówię mu, żeby używał colorAccent i colorPrimary.
Kyle Horkley,
6
Cóż, to bardziej komentarz. Możesz mieć rację, jeśli dodasz przykładowy kod.
Sufian,
W rzeczywistości TextInputLayout wziął dokładnie colorPrimaryten motyw, aby ustawić kolor podpowiedzi i dolnej linii. Chociaż naprawdę powinno być jakieś wyjaśnienie / kod, który mógłby to pokazać w tej odpowiedzi
Kirill Starostin
0

Rozwiązuję problem. To jest układ :

 <android.support.design.widget.TextInputLayout
           android:id="@+id/til_username"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:hint="@string/username"
           >

           <android.support.v7.widget.AppCompatEditText android:id="@+id/et_username"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:singleLine="true"
               />
       </android.support.design.widget.TextInputLayout>

To jest styl:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>
<!-- Application theme. -->


 <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        <item name="colorAccent">@color/pink</item>
        <item name="colorControlNormal">@color/purple</item>
        <item name="colorControlActivated">@color/yellow</item>
    </style>

Powinieneś użyć swojego motywu w aplikacji:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
</application>
Daniel Chen
źródło
0

aby zmienić kolor etykiety tekstowej, gdy się na niej skupiasz. tzn. wpisując go. musisz dodać określić

<item name="android:textColorPrimary">@color/yourcolorhere</item>

Tylko uwaga: musisz dodać wszystkie te implementacje do głównego tematu.

Yash Ojha
źródło
0

Jego działa dla mnie ..... dodaj kolor podpowiedzi w TextInputLayout

    <android.support.design.widget.TextInputLayout
        android:textColorHint="#ffffff"
        android:id="@+id/input_layout_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:id="@+id/edtTextPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:hint="Password"
            android:inputType="textPassword"
            android:singleLine="true"
            />
    </android.support.design.widget.TextInputLayout>
kamal verma
źródło
0

Próbowałem przy użyciu Androida: textColorHint w android.support.design.widget.TextInputLayout działa dobrze.

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@color/colorAccent">

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Hello"
                android:imeActionLabel="Hello"
                android:imeOptions="actionUnspecified"
                android:maxLines="1"
                android:singleLine="true"/>

        </android.support.design.widget.TextInputLayout>
Vicky
źródło
0
  <style name="AppTheme2" parent="AppTheme">
    <!-- Customize your theme here. -->
    <item name="colorControlNormal">#fff</item>
    <item name="colorControlActivated">#fff</item></style>    

dodaj to do stylów i ustaw TextInputLayout Theam na App2 i będzie działać;)

Ahmed mohamed hussien
źródło
0
<com.google.android.material.textfield.TextInputLayout
    android:hint="Hint"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/TextInputLayoutHint">

    <androidx.appcompat.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:maxLines="1"
        android:paddingTop="@dimen/_5sdp"
        android:paddingBottom="@dimen/_5sdp"
        android:textColor="#000000"
        android:textColorHint="#959aa6" />

</com.google.android.material.textfield.TextInputLayout>

res / wartości / styles.xml

<style name="TextInputLayoutHint" parent="">
    <item name="android:textColorHint">#545454</item>
    <item name="colorControlActivated">#2dbc99</item>
    <item name="android:textSize">11sp</item>
</style>
Ketan Ramani
źródło
0

Można użyć, app:hintTextColorjeśli używasz com.google.android.material.textfield.TextInputLayout, spróbuj tego

 <com.google.android.material.textfield.TextInputLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:hint="@string/app_name" 
     app:hintTextColor="@android:color/white">                   

     <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
 </com.google.android.material.textfield.TextInputLayout>
Latief Anwar
źródło
0

Wypróbuj poniższy kod To działa w normalnym stanie

<android.support.design.widget.TextInputLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:theme="@style/TextLabel">

 <android.support.v7.widget.AppCompatEditText
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:hint="Hiiiii"
     android:id="@+id/edit_id"/>


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

W kodzie TextLabel folderu stylów

 <style name="TextLabel" parent="TextAppearance.AppCompat">
<!-- Hint color and label color in FALSE state -->
<item name="android:textColorHint">@color/Color Name</item> 
<item name="android:textSize">20sp</item>
<!-- Label color in TRUE state and bar color FALSE and TRUE State -->
<item name="colorAccent">@color/Color Name</item>
<item name="colorControlNormal">@color/Color Name</item>
<item name="colorControlActivated">@color/Color Name</item>
 </style>
Apps Maven
źródło
0

Z dokumentacji:

Wskazówka powinna być ustawiona na TextInputLayout, a nie na EditText. Jeśli wskazówka zostanie podana w podrzędnym polu EditText w formacie XML, TextInputLayout może nadal działać poprawnie; TextInputLayout użyje podpowiedzi EditText jako pływającej etykiety. Jednak przyszłe wywołania w celu modyfikacji podpowiedzi nie aktualizują podpowiedzi TextInputLayout. Aby uniknąć niezamierzonego zachowania, wywołaj setHint (CharSequence) i getHint () na TextInputLayout zamiast na EditText.

Więc ustawiłem android:hinti app:hintTextColorwłączałem TextInputLayout, a nie włączałem TextInputEditTexti działało.

Karl Jamoralin
źródło
0

Bo trzeba dodać colorControlNormal, colorControlActivated, colorControlHighLightelementy do tematu głównego aplikacji:

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="colorControlActivated">@color/yellow_bright</item>
        <item name="colorControlNormal">@color/yellow_black</item>

    </style>
Samir Elekberov
źródło