Ubah warna petunjuk EditText saat menggunakan TextInputLayout


146

Saya menggunakan yang baru TextInputLayout dari perpustakaan desain. Saya bisa menampilkannya dan mengubah warna label mengambang. Sayangnya EditTextpetunjuk yang sebenarnya sekarang selalu putih.

Saya telah mencoba mengubah hintColor dalam XML, style, dan secara terprogram dan juga mencoba menggunakan android.support.v7.widget.AppCompatEditText tetapiEditText petunjuk selalu menunjukkan warna putih.

Ini XML untuk saya TextInputLayoutdanEditText

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

Dan ini adalah gaya yang saya gunakan untuk TextInputLayout(saya mencoba membuat hintTextColoratribut menjadi hitam tetapi tidak melakukan apa pun untuk saya):

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

Saya menghadapi kesalahan yang sama. Petunjuk selalu merupakan warna "PUTIH" pada awalnya setelah menyentuh setiap edit Teks, dibutuhkan warna yang ditentukan oleh Anda. Masih mencari perbaikannya.
ch3tanz

Sudahkah Anda mencoba jawaban @Ali Kabiri. Sepertinya itu adalah solusi yang lebih baik daripada milikku. Milik saya sangat spesifik untuk proyek saya.
SamIAmHarris

Saya memiliki tema khusus saya dan semua warna ditentukan dalam style.xml
ch3tanz

Jawaban:


164

Tetapkan android:textColorHintdalam tema aplikasi Anda:

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

Sumber


@TheHungryAndroider apakah Anda menetapkan tema sebagai tema acitvity di mana Anda menggunakan teks edit?
mbelsky

1
Ini berfungsi untuk saya tetapi warna petunjuknya tidak diatur pada fragmen & pembuatan tampilan, saya harus mengklik pada saya EditTextuntuk warna petunjuk diatur pada semua input dalam tampilan ... belum menemukan perbaikan apa pun untuk itu ( requestFocus()dan performClick()sayangnya, jangan lakukan triknya).
flawyte

1
berfungsi saat digunakan sebagai atribut: <EditText android: inputType = "textMultiLine" android: lines = "4" android: gravity = "kanan | kanan" android: layout_width = "fill_parent" android: layout_height = "match_parent" android: hint = " hint text "android: textColorHint =" # 919389 "/>
masoud Cheragee

75

Buat gaya kustom di 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>

Kemudian dalam file xml tata letak Anda, tambahkan atribut tema seperti di bawah ini

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

Semoga ini berhasil


4
Menampilkan "Galat mengembang EditTeks kelas". Tolong bantu !
Mohit Khaitan

@Coder beberapa atribut yang ditambahkan adalah untuk
21+

49

Tambahkan properti textColorHint ke teks edit Anda

android:textColorHint="#F6F6F6"

atau warna apa pun yang Anda inginkan


41

punya masalah yang sama. Diselesaikan dengan meletakkan garis-garis ini dalam tema induk .

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

Jika Anda meletakkan ini

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

dalam gaya yang terpisah dan menerapkannya ke TextInputLayout atau Edittext tidak akan muncul Anda HARUS menempatkannya dalam tema induk aplikasi.


3
Sangat frustasi karena tidak dapat memiliki beberapa gaya input di aplikasi menggunakan widget ini, tetapi sejauh yang saya tahu Anda benar. : /
Turnsole

4
Yah, tidak perlu memilikinya di seluruh aplikasi. Anda dapat menerapkan tema ini hanya untuk satu aktivitas di file manifes Anda. Dan buat tema lain untuk sisa kegiatan Anda.
RexSplode

23

Saya tidak yakin apa yang menyebabkan masalah Anda, karena kode ini sangat cocok untuk saya. Saya pikir itu ada hubungannya dengan menggunakan namespace xml yang benar ( xmlns). Saya tidak yakin apakah menggunakan android.support.design tanpa atribut namespace xml didukung. Atau ada hubungannya dengan textColorHintatribut yang Anda gunakan pada EditText itu sendiri.

Tata letak:

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

Gaya:

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

2
Ini masih berfungsi seperti yang saya miliki. Masalah yang saya alami adalah sebelum pengguna menyentuh EditText, warna EditText berwarna putih. Saat pengguna menyentuh EditText, label TextInputLayout berwarna hijau dan berfungsi dengan baik.
SamIAmHarris

masalah yang sama di sini @ user3520299, ada untungnya menemukan perbaikan?
AhmedW

Milik saya adalah kasus unik karena tampilan induk memiliki set tema yang menyebabkan masalah. Tetapi kode yang saya pasang berfungsi dengan baik sekarang setelah saya menghapus tema yang satu itu
SamIAmHarris

1
Ini berfungsi untuk petunjuk mengambang, tetapi bukan petunjuk di dalam kontrol EditText kosong. Untuk itu, perbarui tema aplikasi sesuai jawaban @ mbelsky
Richard Le Mesurier

Omong-omong, aplikasi default: gaya hintTextAppearance adalah @style/TextAppearance.Design.Hint, jadi Anda mungkin ingin menggunakannya sebagai parentdaripada@android:style/TextAppearance@style/TextAppearance.AppCompat
rockgecko

19

Lihat kode di bawah ini bekerja untuk saya. Tapi itu akan mempengaruhi semua warna kontrol Anda.

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

Ini harus diterima - ini menunjukkan properti mana yang digunakan untuk masing-masing elemen yang penting.
Richard Le Mesurier

15

Di TextInputLayout yang menyimpan EditText, tambahkan:

android:textColorHint="someColor"

14

Banyak jawaban tetapi hanya perlu satu baris untuk ini:

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" terkadang berfungsi dan terkadang tidak. Bagi saya di bawah ini solusinya bekerja dengan sempurna

Coba Kode Di Bawah Ini Berhasil dalam file XML Anda dan tema TextLabel didefinisikan dalam 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>

Dalam Styles Folder Kode TextLabel

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

Jika Anda hanya ingin mengubah warna label dalam keadaan salah maka colorAccent, colorControlNormal dan colorControlActivated tidak diperlukan


10

Anda dapat menggunakannya android:textColorHint="@color/color_black"di dalam. TextInputlayoutIni bekerja untuk saya.

<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

Menurut ini: https://code.google.com/p/android/issues/detail?id=176559

Coba ini:

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

Ini bekerja di 23.1.1


6

Dengan pustaka Komponen Bahan Anda dapat menyesuaikan TextInputLayoutwarna teks petunjuk menggunakan:

  • Dalam tata letak:

    • app:hintTextColor atribut: warna label ketika diciutkan dan bidang teks aktif
    • android:textColorHint atribut: warna label di semua negara bagian bidang teks lainnya (seperti istirahat dan dinonaktifkan)

Sesuatu seperti:

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

masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini


5

Sepertinya tampilan induk memiliki gaya untuk pustaka pihak ke-3 yang menyebabkan EditText menjadi putih.

android:theme="@style/com_mixpanel_android_SurveyActivityTheme"

Setelah saya menghapus ini semuanya bekerja dengan baik.


5

coba ini semoga ini membantu

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

        }
    });

mengapa Anda memasukkannya ke pendengar onTextChanged?
user25

5

terlambat tetapi mungkin membantu seseorang yang saya lakukan seperti ini

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

ubah colorAccent Anda ke warna yang Anda inginkan di dalam Theme Anda, ini akan mengubah baris EditText Anda, Kursor serta petunjuk Anda

atau Anda juga bisa memasukkan gaya ini ke dalam style.xml Anda

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

kemudian di dalam TextInputLayout Anda, Anda bisa meletakkannya seperti ini

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

Gunakan textColorHint untuk mengatur warna yang Anda inginkan sebagai warna Petunjuk untuk EditText. Masalahnya adalah Petunjuk dalam EditText menghilang bukan ketika Anda mengetik sesuatu, tetapi segera ketika EditText mendapatkan fokus (dengan animasi keren). Anda akan melihat ini dengan jelas ketika Anda mengalihkan fokus dan ke EditText.


3

Dari dokumentasi:

Petunjuk harus ditetapkan pada TextInputLayout, bukan pada EditText. Jika sebuah petunjuk ditentukan pada EditText anak dalam XML, TextInputLayout mungkin masih berfungsi dengan benar; TextInputLayout akan menggunakan petunjuk EditText sebagai label apung. Namun, panggilan selanjutnya untuk memodifikasi petunjuk tidak akan memperbarui petunjuk TextInputLayout. Untuk menghindari perilaku yang tidak diinginkan, panggil setHint (CharSequence) dan getHint () di TextInputLayout, alih-alih di EditText.

Coba setting android:hintdan app:hintTextColorpada TextInputLayoutbukan pada 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

Coba kode di bawah ini:

Warna cahaya tinggi adalah Putih:

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

style: 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

Inilah pengalaman saya dengan masalah serupa ini & solusi yang diperlukan.

Kebutuhan:

  • Perlu membuat penyesuaian TextInputEditText(dapat mengatakan beberapa harus transparan dan beberapa tidak harus tetapi menggunakan warna khusus untuk berbagai acara)

Masalah yang dihadapi:

  • android:textColorHint tidak berfungsi seperti yang diminta.

Solusi mencoba, yang gagal:

  • Digunakan android:textColorHintdengan gaya dan diterapkan TextInputEditText. Tidak ada hasil atau perbedaan.
  • Set android:textColorHintdalam tema aplikasi diterapkan. Memang membantu tetapi sekarang ditetapkan untuk seluruh aplikasi. (Tidak sesuai dengan kebutuhan)

Setelah banyak RnD, SOLUSI terbaik yang ditemukan adalah dalam artikel yang menggambarkan bahwa kita perlu menerapkan tema ke TextInputLayoutatau ke tampilan orang tua daripada hanya menerapkan gaya keTextInputEditText atau ke tampilan orang tua itu.

Silakan periksa TextInputLayout tepat Mereka yang mengatakan bahwa bagaimana kita berada di jalur yang salah.


0

Ketika saya mencoba untuk mengatur atribut tema ke TextInputLayout, tema itu juga diterapkan pada tampilan anak edittext, yang saya tidak inginkan.

Jadi solusi yang berhasil bagi saya adalah menambahkan gaya kustom ke properti "app: hintTextAppearance" dari TextInputLayout.

Di styles.xml tambahkan gaya berikut:

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

Dan terapkan gaya ini ke properti "app: hintTextAppearance" dari TextInputLayout seperti di bawah ini:

<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

Jika Anda menggunakan pustaka desain Bahan androidx baru com.google.android.material maka Anda dapat menggunakan colorstatelist untuk mengontrol warna teks petunjuk dalam keadaan fokus, melayang dan default sebagai berikut. (terinspirasi oleh ini )

Dalam res/color/text_input_box_stroke.xmlput sesuatu seperti berikut ini:

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

Kemudian di Anda, styles.xmlAnda akan menempatkan:

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

Terakhir, tunjukkan gaya Anda di aktual. TextInputLayout Untuk beberapa alasan, Anda juga perlu menetapkan android:textColorHintwarna teks petunjuk standar:

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

0

jika Anda menggunakan pustaka desain Material. Saat ini, saya menggunakan versi

implementasi 'com.google.android.material: material: 1.3.0-alpha01'

1 - Tetapkan warna saat TextInputLayout sedang beristirahat.

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

2 - Tetapkan warna saat TextInputLayout mengambang / fokus / disadap.

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

3 - Tetapkan warna garis di bawah TextInputLayout.

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

4 - Atur warna kesalahan di bawah TextInputLayout.

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

0

Saya hanya ingin mengubah warna label saat diangkat ke atas. Tetapi pengaturan textColorHintmengubah warna di setiap negara. Jadi, ini berhasil bagi saya:

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

Ini akan mengubah warna saat input difokuskan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.