TextInputLayout kullanırken EditText ipucu rengini değiştirme


150

TextInputLayoutTasarım kitaplığındaki yeniyi kullanıyorum . Yüzen etiketin rengini göstermesini ve değiştirmesini sağlayabiliyorum. Ne yazık ki gerçek EditTextipucu artık her zaman beyazdır.

HintColor'u XML'de, stillerde ve programlı olarak değiştirmeyi denedim ve ayrıca android.support.v7.widget.AppCompatEditText ama EditTextipucu her zaman beyaz gösteriyor.

İşte benim XML'im TextInputLayoutveEditText

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

Ve işte kullandığım stil TextInputLayout( hintTextColorniteliği siyah yapmaya çalıştım ama benim için hiçbir şey yapmadım):

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

Ben de aynı hatayla karşılaşıyorum. İpucu her zaman "BEYAZ" renktedir, herhangi bir editText'e dokunduktan sonra, sizin tanımladığınız rengi alır. Hala düzeltmeyi arıyorum.
ch3tanz

@Ali Kabiri'nin cevabını denediniz mi? Benimkinden daha iyi bir çözüm gibi görünüyor. Benimki projeme çok özeldi.
SamIAmHarris

Benim özel temam var ve tüm renkler style.xml'de tanımlı
ch3tanz

Yanıtlar:


165

android:textColorHintUygulama temanızda tanımlayın :

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

Kaynak


@TheHungryAndroider, temayı düzenleme metnini kullandığınız etkinlik teması olarak ayarladınız mı?
mbelsky

1
Benim için işe yarıyor, ancak ipucunun rengi parça ve görünüm oluşturmada EditTextayarlanmadı, görünümdeki tüm girişlerde ipucu renginin ayarlanması için benim üzerine tıklamam gerekiyor ... henüz bir düzeltme bulamadım ( requestFocus()ve performClick()maalesef hile yapmayın).
flawyte

1
özellik olarak kullanıldığında çalıştı: <EditText android: inputType = "textMultiLine" android: lines = "4" android: gravity = "top | right" android: layout_width = "fill_parent" android: layout_height = "match_parent" android: hint = " hint text "android: textColorHint =" # 919389 "/>
masoud Cheragee

75

Style.xml'de özel stil oluşturun

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

Ardından layout xml dosyanıza aşağıdaki gibi tema özelliğini ekleyin

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

umarım bu işe yarar


4
"EditText sınıfı şişirilirken hata" gösteriliyor. Lütfen yardım et !
Mohit Khaitan

@Coder eklediği özelliklerden bazıları 21+ için
Bay O

51

Düzenleme metninize textColorHint özelliği ekleyin

android:textColorHint="#F6F6F6"

ya da hangi rengi istersen


42

aynı sorunu yaşadım. Bu satırları ana temaya koyarak çözüldü .

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

Bunları koyarsan

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

ayrı bir stilde ve TextInputLayout veya Edittext'e uygulayın , görünmez. Sen VAR uygulamanın ana tema yerleştirmek için.


3
Bu widget'ı kullanarak uygulamada birden fazla giriş stiline sahip olamamak gerçekten sinir bozucu, ancak bildiğim kadarıyla haklısınız. : /
Turnsole

4
Eh, tüm başvuruda olması gerekli değildir. Bu temayı, manifest dosyanızdaki yalnızca bir etkinliğe uygulayabilirsiniz. Diğer aktiviteleriniz için başka bir tema oluşturun.
RexSplode

23

Bu kodun benim için mükemmel çalışmasına neden olan sorunun ne olduğundan emin değilim. Doğru xml ad alanını ( xmlns) kullanmakla ilgisi olduğunu düşünüyorum . Xml ad alanı özelliği olmadan android.support.design kullanmanın desteklenip desteklenmediğinden emin değilim. Veya textColorHintEditText üzerinde kullandığınız öznitelikle bir ilgisi vardır .

Yerleşim:

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

Tarz:

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

2
Bu hala benim sahip olduğum gibi çalışıyor. Yaşadığım sorun, kullanıcı Metni Düzenle'ye dokunmadan önce Metni Düzenle renginin beyaz olmasıdır. Kullanıcı EditText'e dokunduğunda, TextInputLayout etiketi yeşildir ve sorunsuz çalışır.
SamIAmHarris

Burada aynı sorun @ user3520299, bir düzeltme bulma şansınız var mı?
AhmedW

Benimki benzersiz bir durumdu çünkü ana görünümde soruna neden olan bir tema seti vardı. Ama koyduğum kod, o temayı kaldırdıktan sonra şimdi iyi çalışıyor
SamIAmHarris

1
Bu, kayan ipucu için çalışır, ancak boş EditText denetimi içindeki ipucu için geçerli değildir. Bunun için, uygulama temasını @ mbelsky'nin cevabına göre güncelleyin
Richard Le Mesurier

Bu arada, varsayılan uygulama: hintTextAppearance tarzıdır @style/TextAppearance.Design.Hint, kendi olarak kullanıp isteyebilirsiniz böylece parentyerine @android:style/TextAppearanceya@style/TextAppearance.AppCompat
rockgecko

19

Benim için çalıştığı aşağıdaki koda bakın, ancak tüm kontrollerinizin rengini etkileyecektir.

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

Bu kabul edilmelidir - önemli olan unsurların her biri için hangi özelliklerin kullanıldığını gösterir.
Richard Le Mesurier

15

EditText'i tutan TextInputLayout'a şunu ekleyin:

android:textColorHint="someColor"

14

Çok fazla cevap var ama bunun için sadece bir satıra ihtiyacınız var:

android: textColorHint = "# 000000"

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

12

İle Malzeme Bileşenler kütüphanede özelleştirebilirsiniz TextInputLayoutkullanarak ipucu metin rengi:

  • Düzende:

    • app:hintTextColor özellik: daraltıldığında ve metin alanı etkinken etiketin rengi
    • android:textColorHint özellik: tüm diğer metin alanı durumlarındaki etiketin rengi (dinlenme ve devre dışı bırakma gibi)

Gibi bir şey:

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

görüntü açıklamasını buraya giringörüntü açıklamasını buraya girin


10

android: textColorHint = "# FFFFFF" bazen çalışır ve bazen çalışmaz. Benim için aşağıdaki çözüm mükemmel çalışıyor

Aşağıdaki Kodu Deneyin Çalışır XML dosyanızda ve TextLabel teması style.xml'de tanımlanmıştır

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

Stiller Klasöründe TextLabel Kodu

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

Etiketin rengini yanlış durumda değiştirmek istiyorsanız, colorAccent, colorControlNormal ve colorControlActivated gerekli değildir.


10

android:textColorHint="@color/color_black"İçeride kullanabilirsiniz TextInputlayoutBenim için çalıştı.

<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

Buna göre: https://code.google.com/p/android/issues/detail?id=176559

Bunu dene:

<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'de çalışır


5

Üst görünümün, EditText'in beyaz olmasına neden olan bir 3. taraf kitaplığı için bir stili var gibi görünüyor.

android:theme="@style/com_mixpanel_android_SurveyActivityTheme"

Bunu çıkardıktan sonra her şey yolunda gitti.


5

Bunu dene bu yardımcı olabilir

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

        }
    });

neden onTextChanged dinleyicisine koydunuz?
kullanıcı25

5

geç ama böyle yaptığım birine yardımcı olabilir

<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
        <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'i, EditText için İpucu rengi olarak istediğiniz rengi ayarlamak için kullanın. Mesele şu ki, EditText'teki Hint bir şey yazdığınızda değil, EditText odaklandığında (harika bir animasyonla) hemen kayboluyor. Odağı uzaklaştırıp Metni Düzenle'ye getirdiğinizde bunu açıkça fark edeceksiniz.


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

colorAccent'inizi Temanızın içinde istediğiniz renge değiştirin; bu, EditText satırınızı, İmleci ve ipucunuzu değiştirir

veya bu stili style.xml dosyanıza da ekleyebilirsiniz.

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

sonra TextInputLayout'unuzun içine şöyle koyabilirsiniz:

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

4

Belgelerden:

İpucu, EditText yerine TextInputLayout üzerinde ayarlanmalıdır. XML'deki EditText alt öğesinde bir ipucu belirtilirse, TextInputLayout yine de düzgün çalışabilir; TextInputLayout, yüzer etiketi olarak EditText'in ipucunu kullanacaktır. Ancak, ipucunu değiştirmeye yönelik ilerideki çağrılar TextInputLayout'un ipucunu güncellemeyecektir. İstenmeyen davranıştan kaçınmak için, EditText yerine TextInputLayout üzerinde setHint (CharSequence) ve getHint () çağırın.

Belirlemeyi deneyin android:hintve app:hintTextColorüzerine TextInputLayoutyerine üzerinde TextInputEditText.


4

Materyal tasarım kitaplığını kullanıyorsanız. Şu anda sürümünü kullanıyorum

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

1 - TextInputLayout dinlenirken rengi ayarlayın.

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

2 - TextInputLayout kayan / odaklanmış / dokunulduğunda rengi ayarlayın.

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

3 - TextInputLayout altında çizginin rengini ayarlayın.

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

4 - TextInputLayout altında hatanın rengini ayarlayın.

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


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

1

Tema özniteliğini TextInputLayout olarak ayarlamaya çalıştığımda tema, benim istemediğim alt görünüm edittext'ine de uygulanıyordu.

Dolayısıyla benim için işe yarayan çözüm, TextInputLayout'un "app: hintTextAppearance" özelliğine özel bir stil eklemekti.

Styles.xml'de aşağıdaki stili ekleyin:

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

Ve bu stili TextInputLayout'un "app: hintTextAppearance" özelliğine aşağıdaki gibi uygulayın:

<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

Aşağıdaki kodu deneyin:

Yüksek ışık rengi Beyazdır:

 <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

İşte bu benzer sorun ve gerekli çözümle ilgili deneyimim.

Gereksinim:

  • Özelleştirme oluşturmanız gerekiyor TextInputEditText(bazılarının şeffaf olması gerektiğini ve bazılarının olmamasını ancak çeşitli etkinlikler için özel renkler kullanması gerektiğini söyleyebiliriz)

Karşılaşılan sorun:

  • android:textColorHint gerektiği gibi çalışmıyor.

Çözümler denendi, başarısız oldu:

  • Tarzda kullanılır android:textColorHintve uygulanır TextInputEditText. Sonuç veya fark yok.
  • android:textColorHintUygulamanın temasını ayarlayın . Yardımcı oldu ama şimdi tüm uygulama için ayarlandı. (Gereksinime uygun değil)

RnD bir sürü sonra, en iyi çözüm bulundu biz uygulamak gerektiğini tarif bir makalede oldu tema için TextInputLayoutdaha doğrusu o sadece uygulayarak 's ana görünümüne stili için TextInputEditTextveya' s ana görünümüne.

Lütfen nasıl yanlış yolda olduğumuzu söyleyen TextInputLayout uygun Temaları kontrol edin .


0

Yeni androidx Material tasarım kitaplığı com.google.android.material kullanıyorsanız, aşağıdaki gibi odaklanmış, üzerine getirilmiş ve varsayılan durumda ipucu metin rengini kontrol etmek için colorstatelist'i kullanabilirsiniz. (esinlenerek Bu )

In res/color/text_input_box_stroke.xmlaşağıdaki gibi koymak şey:

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

Sonra senin styles.xmliçine koyarsın:

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

Son olarak stilinizi gerçekte TextInputLayout belirtin Bazı nedenlerden dolayı android:textColorHint, ipucu için varsayılan metin rengini de ayarlamanız gerekir :

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

0

Etiket rengini sadece yukarı kaldırıldığında değiştirmek istedim. Ancak ayar textColorHint, rengi her durumda değiştirir. Bu benim için çalıştı:

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

Bu, giriş odaklandığında rengi değiştirecektir.


0

Kullanım TextInputLayout.setDefaultHintTextColor

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.