Змініть колір підказки EditText під час використання TextInputLayout


146

Я використовую нове TextInputLayoutз бібліотеки дизайну. Я можу змусити його показати та змінити колір плаваючої етикетки. На жаль, актуальний EditTextнатяк тепер завжди білий.

Я спробував змінити hintColor у XML, стилях та програмно, а також намагався використовувати, android.support.v7.widget.AppCompatEditText але EditTextпідказка завжди показує білий колір.

Ось мій XML для моїх TextInputLayoutтаEditText

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


    <EditText

    android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/city"
        android:textColorHint="@color/black"
        android:hint="@string/city" />

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

І ось стиль, який я використовую для TextInputLayout(я спробував зробити hintTextColorатрибут чорним, але нічого не зробив для мене):

<style name="GreenTextInputLayout" parent="@style/TextAppearance.AppCompat">
    <item name="android:textColor">@color/homestory_green</item>
</style>

Я зіткнувся з тією ж помилкою. Підказка - це завжди "БІЛИЙ" колір, спочатку після торкання будь-якого редагування тексту. Досі шукаємо виправлення.
ch3tanz

Ви спробували відповідь @Ali Kabiri Схоже, це краще рішення, ніж моє. Шахта була дуже специфічною для мого проекту.
SamIAmHarris

У мене власна тема і всі кольори визначені у style.xml
ch3tanz

Відповіді:


164

Визначте android:textColorHintв темі програми:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>

    <item name="android:textColorHint">@color/secondary_text</item>
</style>

Джерело


@TheHungryAndroider ви вказали цю тему як тему активності, де ви використовуєте текст редагування?
mbelsky

1
Це працює для мене, але колір натяку не встановлений при створенні фрагмента та перегляду, я повинен натиснути на мій, EditTextщоб колір підказки було встановлено на всіх входах у вікні перегляду ... ще не знайшли жодного виправлення до цього ( requestFocus()і performClick()на жаль, не робіть трюку).
flawyte

1
працював при використанні в якості атрибута: <EditText android: inputType = "textMultiLine" android: lines = "4" android: gravity = "верхній | правий" android: layout_width = "fill_parent" android: layout_height = "match_parent" android: hint = " натяк на текст "android: textColorHint =" # 919389 "/>
masoud Cheragee

75

Створіть нестандартний стиль у style.xml

<style name="EditTextHint" parent="TextAppearance.AppCompat">
    <item name="colorAccent">@android:color/white</item>
    <item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
    <item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
    <item name="colorControlActivated">@color/your color</item>
    <item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>
</style>

Потім у свій файл розміщення xml додайте атрибут теми, як показано нижче

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

      <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

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

сподіваюся, що це працює


4
Показано "Помилка надуття класу EditText". Будь ласка, допоможіть !
Мохіт Хайтан

@Coder деякі атрибути, які він додав, стосуються
21+

49

Додайте в текст редагування властивість textColorHint

android:textColorHint="#F6F6F6"

або будь-якого кольору ви хочете


41

отримала таку ж проблему. Вирішується шляхом введення цих рядків у батьківську тему.

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/ColorPrimaryDark</item>
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
    <item name="colorAccent">@color/AccentColor</item>
    <item name="android:windowTranslucentStatus">true</item>

    <item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
    <item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
    <item name="colorControlActivated">#ff0000</item>
    <item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>
    <!-- Customize your theme here. -->
</style>

Якщо ви поставите ці

<item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
<item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
<item name="colorControlActivated">#ff0000</item>
<item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>

в окремому стилі та застосуйте його до TextInputLayout або Edittext він не з’явиться. Ви повинні розмістити його в батьківській темі програми.


3
Насправді засмучувати неможливо мати кілька стилів введення в додатку за допомогою цього віджета, але, наскільки я можу сказати, ти маєш рацію. : /
Турнсол

4
Ну, не обов’язково це мати у всій програмі. Ви можете застосувати цю тему лише до однієї дії у вашому файлі маніфесту. І створіть іншу тему для решти вашої діяльності.
RexSplode

23

Я не впевнений, що викликає вашу проблему, і цей код ідеально працює для мене. Я думаю, це має відношення до використання правильного простору імен xml ( xmlns). Я не впевнений, чи підтримується андроїд.support.design без атрибуту простору імен xml. Або це має щось textColorHintспільне з атрибутом, який ви використовуєте в самому EditText.

Макет:

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

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="test"
        android:inputType="text" />
</android.support.design.widget.TextInputLayout>

Стиль:

<style name="GreenTextInputLayout" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00FF00</item>
</style>

2
Це все ще працює, як у мене. Проблема у мене полягає в тому, що перш ніж користувач торкнеться EditText, колір EditText є білим. Коли користувач торкається EditText, мітка TextInputLayout зелена і працює добре.
SamIAmHarris

така ж проблема тут @ user3520299, якась удача у пошуку виправлення?
AhmedW

У мене був унікальний випадок, оскільки у батьківського перегляду був набір тем, що спричиняв проблему. Але код, який я виклав, працює добре зараз після того, як я видалив цю тему
SamIAmHarris

1
Це працює для плаваючої підказки, але не підказки всередині порожнього елемента EditText. Для цього оновіть тему програми відповідно до відповіді @ mbelsky
Річард Ле Месюр'є

До речі, додаток за замовчуванням: hintTextAppearance стиль @style/TextAppearance.Design.Hint, так що ви можете використовувати це як ваш , parentа не @android:style/TextAppearanceчи@style/TextAppearance.AppCompat
rockgecko

19

Перегляньте нижченаведений код, який він працював для мене. Але це вплине на всі ваші кольори керування.

 <!-- In your style.xml file -->
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
            <!--EditText hint color-->
            <item name="android:textColorHint">@color/default_app_white</item>
           <!-- TextInputLayout text color-->
            <item name="colorControlActivated">@color/default_app_green</item>
            <!-- EditText line color when EditText on-focus-->
            <item name="colorControlHighlight">@color/default_app_green</item>
            <!-- EditText line color when EditText  in un-focus-->
            <item name="colorControlNormal">@color/default_app_white</item>
        </style>

Це слід прийняти - воно показує, які властивості використовуються для кожного з важливих елементів.
Річард Ле Месюр'є


14

Дуже багато відповідей, але для цього потрібен лише рядок:

android: textColorHint = "# 000000"

    <EditText
        android:id="@+id/edtEmail"
        android:textColorHint="#000000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

10

android: textColorHint = "# FFFFFF" колись працює, а коли-небудь не працює. Для мене нижче рішення відмінно працює

Спробуйте внизу код, який працює у вашому XML-файлі, а тема TextLabel визначена у style.xml

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

     <EditText
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:hint="Floating Label"
         android:id="@+id/edtText"/>

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

Код текстової мітки в папці стилів

 <style name="MyTextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/Color Name</item> 
<!--The size of the text appear on label in false state -->
    <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>

Якщо ви просто хочете змінити колір ярлика в помилковому стані, тоді colorAccent, colorControlNormal і colorControlActivate не потрібно


10

Ви можете використовувати android:textColorHint="@color/color_black"всередині. TextInputlayoutЦе працювало для мене.

<android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dp_10"
                android:textColorHint="@color/color_black"
                app:hintTextAppearance="@style/TextLabel">

                <EditText
                    android:id="@+id/et_state"
                    style="@style/profile_editTextStyle"

                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/billingState"
                    android:text="@string/billingState"
                     />
            </android.support.design.widget.TextInputLayout>

8

Відповідно до цього: https://code.google.com/p/android/isissue/detail?id=176559

Спробуйте це:

<android.support.design.widget.TextInputLayout
    android:textColorHint="#A7B7C2"
    android:layout_width="match_parent"
    android:layout_height="50dp">

    <EditText
        android:id="@+id/et_confirm_password"
        android:textColor="@android:color/black"
        android:hint="Confirm password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 </android.support.design.widget.TextInputLayout>

Він працює в 23.1.1


6

За допомогою бібліотеки "Матеріальні компоненти" ви можете налаштувати TextInputLayoutколір підказки за допомогою:

  • У макеті:

    • app:hintTextColor атрибут: колір мітки при згортанні та текстовому полі активний
    • android:textColorHint атрибут: колір мітки у всіх інших станах текстового поля (наприклад, в режимі спокою та вимкнення)

Щось на зразок:

<com.google.android.material.textfield.TextInputLayout
     app:hintTextColor="@color/mycolor"
     android:textColorHint="@color/text_input_hint_selector"
     .../>

введіть тут опис зображеннявведіть тут опис зображення


5

Схоже, батьківський вигляд мав стиль для сторонньої бібліотеки, яка спричиняла білий колір EditText.

android:theme="@style/com_mixpanel_android_SurveyActivityTheme"

Після того, як я зняв це, все працювало нормально.


5

спробуйте це може допомогти

      edittext.addTextChangedListener(new  TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "onTextChanged", 2000).show();;
            //newuser.setTextColor(Color.RED);
            edittext.setHintTextColor(Color.RED);

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "afterTextChanged", 2000).show();;

        }
    });

чому ви помістили його на слухача OnTextChanged?
користувач25

5

пізно, але це може допомогти комусь, що я зробив так

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginLeft="30dp"
        android:layout_marginStart="30dp"
        android:textColorHint="#8cffffff">

        <android.support.v7.widget.AppCompatEditText
            android:id="@+id/email_edit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/security_email"
            android:inputType="textEmailAddress"
            android:textColor="@color/white"
            app:backgroundTint="#8cffffff" />
    </android.support.design.widget.TextInputLayout>

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

змінити колір акценту на потрібний колір у вашій темі, це змінить лінію редагування тексту, курсор, а також ваш підказку

або ви також можете включити цей стиль у свій style.xml

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

то всередині вашого TextInputLayout ви можете поставити його так

<android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/TextLabel">
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/password"
                android:drawableStart="@drawable/password"
                android:maxLines="1"
                android:hint="password"
                android:inputType="textWebPassword" />

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

3
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Name"
                android:textColor="@color/black"
                android:textColorHint="@color/grey"/>
        </android.support.design.widget.TextInputLayout>

Використовуйте textColorHint, щоб встановити колір, який ви хочете як колір підказки для EditText. Вся справа в тому, що підказка в EditText зникає не коли ви щось набираєте, а відразу, коли EditText отримує фокус (із класною анімацією). Це ви помітите чітко, коли ви перемкнете фокус і перейдіть на EditText.


3

З документації:

Підказку слід встановити на TextInputLayout, а не на EditText. Якщо на дочірньому EditText в XML вказано підказку, TextInputLayout все ще може працювати правильно; TextInputLayout використовуватиме підказку EditText як плаваючу мітку. Однак майбутні дзвінки на зміну підказки не змінять підказку TextInputLayout. Щоб уникнути ненавмисної поведінки, замість EditText викличте setHint (CharSequence) та getHint () на TextInputLayout.

Спробуйте встановити android:hintі app:hintTextColorна , TextInputLayoutа не на TextInputEditText.



1
 <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_passdword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColorHint="#d3d3d3">
        <EditText
            android:id="@+id/etaddrfess_ciwty"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:bottomLeftRadius="10dp"
            android:bottomRightRadius="50dp"
            android:fontFamily="@font/frutiger"
            android:gravity="start"
            android:hint="@string/address_city"
            android:padding="10dp"
            android:textColor="#000000"
            android:textColorHint="#000000"
            android:textSize="14sp"
            android:topLeftRadius="10dp"
            android:topRightRadius="10dp" />
    </android.support.design.widget.TextInputLayout>``

0

Спробуйте код нижче:

Високий світлий колір - білий:

 <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_mobile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/TextStyle"
        >

        <EditText
            android:id="@+id/input_mobile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:drawablePadding="14dp"
            android:drawableLeft="8dp"
            android:textColor="@color/white"
            android:hint="Mobile" />
    </android.support.design.widget.TextInputLayout>

стиль: TextStyle

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

0

Ось мій досвід подібного питання та потрібне рішення.

Вимога:

  • Потрібно створити налаштування TextInputEditText(можна сказати, що деякі повинні бути прозорими, а деякі не бути, але використовувати спеціальні кольори для різних подій)

Проблема, з якою стикається:

  • android:textColorHint не працює як потрібно.

Рішення спробували, але не вдалося:

  • Використовується android:textColorHintв стилі і застосовується до TextInputEditText. Немає результатів чи різниці.
  • Установити android:textColorHintв застосованій темі програми. Це допомогло, але тепер воно було встановлено для всієї програми. (Не до позначення вимоги)

Після багато RnD, найкращим рішенням було знайдено у статті, в якій описано, що нам потрібно застосувати тему до TextInputLayoutабо до її виду батьків, а не лише застосувати стиль до TextInputEditTextабо його батьківського перегляду.

Будь ласка, перевірте належну тему TextInputLayout, яка розповіла, що ми не в цьому напрямку.


0

Коли я намагався встановити атрибут теми TextInputLayout, ця тема також застосовувалася до її дочірнього редагування тексту, чого я не хотів.

Тому рішення, яке працювало для мене, було додати користувальницький стиль до властивості "app: hintTextAppearance" TextInputLayout.

У styles.xml додайте такий стиль:

<style name="TextInputLayoutTextAppearance" parent="TextAppearance.AppCompat">
    <item name="android:textColor">@color/text_color</item>
    <item name="android:textSize">@dimen/text_size_12</item>
</style>

І застосуйте цей стиль до властивості "app: hintTextAppearance" TextInputLayout, як показано нижче:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/mobile_num_til"
        android:layout_width="0dp"
        android:layout_height="@dimen/dim_56"
        app:layout_constraintStart_toStartOf="@id/title_tv"
        app:layout_constraintEnd_toEndOf="@id/title_tv"
        app:layout_constraintTop_toBottomOf="@id/sub_title_tv"
        android:layout_marginTop="@dimen/dim_30"
        android:padding="@dimen/dim_8"
        app:hintTextAppearance="@style/TextInputLayoutTextAppearance"
        android:background="@drawable/rect_round_corner_grey_outline">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/mobile_num_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="@string/mobile_number"
            android:gravity="center_vertical"
            android:background="@android:color/transparent"/>

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

0

Якщо ви використовуєте нову бібліотеку дизайну матеріалів Android, com.google.android.material ви можете використовувати кольоросталіст для керування кольором тексту підказки у зосередженому, завислому та за замовчуванням стані наступним чином. (натхненний цим )

В res/color/text_input_box_stroke.xmlпокласти що - щось подібне до наступного:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#fcc" android:state_focused="true"/>
    <item android:color="#cfc" android:state_hovered="true"/>
    <item android:color="#ccf"/>
</selector>

Тоді у свій styles.xmlти би поставив:

<style name="MtTILStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="boxStrokeColor">@color/text_input_box_stroke</item>
    <item name="hintTextColor">@color/text_input_box_stroke</item>
</style>

Нарешті вкажіть свій стиль у фактичному. TextInputLayout Чомусь вам також потрібно встановити android:textColorHintколір підказки за замовчуванням:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/my_layout_id"
    style="@style/LoginTextInputLayoutStyle"
    android:textColorHint="#ccf"
    ...

0

якщо ви використовуєте бібліотеку Матеріал дизайну. Наразі я використовую версію

реалізація 'com.google.android.material: матеріал: 1.3.0-alpha01'

1 - Встановіть колір, коли TextInputLayout відпочиває.

<item name="android:textColorHint">@color/your_color_hint</item>

2 - Встановіть колір, коли TextInputLayout плаває / фокусується / торкається.

<item name="hintTextColor">@color/your_color_floating_hint</item>

3 - Встановіть колір рядка під TextInputLayout.

<item name="boxStrokeColor">@color/TextViewColor_line</item>

4 - Встановіть колір помилки під TextInputLayout.

<item name="boxStrokeErrorColor">@color/colorPrimary</item>

0

Мені хотілося змінити колір етикетки лише тоді, коли вона буде піднята вгору. Але налаштування textColorHintзмінює колір у кожному стані. Отже, це працювало для мене:

   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
       ...
        <item name="colorControlActivated">@color/colorPrimary</item>
       ...
    </style>

Це змінить колір, коли вхід буде сфокусований.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.