TextinputLayout'un etiketinin ve edittext'in altını çizen android'in rengi nasıl değiştirilir


121

Android tasarım kitaplığı kullanıyorum TextinputLayout. Ancak ipucu rengini, etiket rengini ve EditTextiç kısmın alt çizgi rengini özelleştiremedi TextinputLayout. Lütfen yardım et.


1
Tasarım yönergelerine göre vurgu rengine sahip olmalı, değil mi?
Raghunandan

ya, ancak temanın vurgu renginden farklı renklere sahip birçok editTex'im olacak.
Nitesh Verma


Cevabımı kontrol edin burada etiket rengini değiştirmek için
Summved Jain

Hem odaklanmış ve odaklanmamış devlet belirtilen özel arka plan çizilebilir kullanarak I güvenilir altı çizili değişebilir stackoverflow.com/a/36543554/2413303
EpicPandaForce

Yanıtlar:


257

Alt çizgi rengini değiştirin:

<item name="colorControlNormal">#c5c5c5</item>
<item name="colorControlActivated">@color/accent</item>
<item name="colorControlHighlight">@color/accent</item>

Daha fazla bilgi için bu konuyu kontrol edin .

Yüzen haldeyken ipucu rengini değiştirin

<style name="MyHintStyle" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/main_color</item>
</style>

ve şu şekilde kullanın:

<android.support.design.widget.TextInputLayout
    ...
    app:hintTextAppearance="@style/MyHintStyle">

Kayan bir etiket olmadığında ipucu rengini değiştirin:

<android.support.design.widget.TextInputLayout
    ...
    app:hintTextAppearance="@style/MyHintStyle"
    android:textColorHint="#c1c2c4">

@AlbAtNf sayesinde


İpucu rengini değiştiremiyorum (etiketi olmadığında) Yardımcı olabilir misiniz?
Nitesh Verma

Uygulamama ne kadar ek boyut koymamın beklendiğine dair herhangi bir fikrimi göz önünde bulundurarak uygulama boyutum hakkında gerçekten endişeliyim?
Nitesh Verma

pardon, sorunuzu alamadım, lütfen daha fazla açıklayın, hangi bağlamda boyut, uygulama ağırlığının grafik boyutu (apk'nin 20mb'nin üzerinde olması gibi) ve daha önce cevabımı kabul ediyorsunuz ve yine kabulünüzü kaldırıyorsunuz, sorabilir miyim öyle mi?
Pankaj Arora

becoz, cevabınızı takiben ipucu rengini değiştiremedim. Bir kısmı benim için çalıştı, ancak bu sorduğum şeyin tam bir çözümü değil. Uygulama boyutuyla ilgili olarak, Material EdiTText gibi harici kitaplık eklemek uygulama boyutunu artırmıyor mu?
Nitesh Verma

4
@NiteshVerma o olmadığı zaman, ayarı İpucu Renk çözüm buldu bir etikel yüzer: basitçe set android:textColorHintiçin TextInputLayoutXML.
AlbAtNf

30

Fedor Kazakov ve diğerlerinin cevaplarına dayanarak, bir varsayılan yapılandırma oluşturdum.

styles.xml

<resources>

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

    <style name="Widget.Design.TextInputLayout" parent="AppTheme">
        <item name="hintTextAppearance">@style/AppTheme.TextFloatLabelAppearance</item>
        <item name="errorTextAppearance">@style/AppTheme.TextErrorAppearance</item>
        <item name="counterTextAppearance">@style/TextAppearance.Design.Counter</item>
        <item name="counterOverflowTextAppearance">@style/TextAppearance.Design.Counter.Overflow</item>
    </style>

    <style name="AppTheme.TextFloatLabelAppearance" parent="TextAppearance.Design.Hint">
        <!-- Floating label appearance here -->
        <item name="android:textColor">@color/colorAccent</item>
        <item name="android:textSize">20sp</item>
    </style>

    <style name="AppTheme.TextErrorAppearance" parent="TextAppearance.Design.Error">
        <!-- Error message appearance here -->
        <item name="android:textColor">#ff0000</item>
        <item name="android:textSize">20sp</item>
    </style>

</resources>

activity_layout.xml

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

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Text hint here"
        android:text="5,2" />

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

Odaklı:

Odaklı

Odaklanma olmadan:

Odak olmadan

Hata mesajı:

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


9
Odaklanmadan pembe renk almak için ne yapmalıyım?
John Smith

bu tarz nasıl kullanılır?
Hanzala

24

İle Malzeme Bileşenleri Kütüphanesi kullanabilirsiniz com.google.android.material.textfield.TextInputLayout.

Renkleri değiştirmek için özel bir stil uygulayabilirsiniz.

İpucu rengini değiştirmek için şu nitelikleri kullanmanız gerekir:
hintTextColorve android:textColorHint.

<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
    <!-- The color of the label when it is collapsed and the text field is active -->
    <item name="hintTextColor">?attr/colorPrimary</item>

    <!-- The color of the label in all other text field states (such as resting and disabled) -->
    <item name="android:textColorHint">@color/selector_hint_text_color</item>
</style>

İçin bir seçici kullanmalısınız android:textColorHint. Gibi bir şey:

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

Alt çizgi rengini değiştirmek için size özellik kullanmak zorunda: boxStrokeColor.

<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
    ....
    <item name="boxStrokeColor">@color/selector_stroke_color</item>
</style>

Ayrıca bu durumda bir seçici kullanmalısınız. Gibi bir şey:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="?attr/colorPrimary" android:state_focused="true"/>
  <item android:alpha="0.87" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
  <item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>

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

Bu nitelikleri düzeninize de uygulayabilirsiniz:

<com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
    app:boxStrokeColor="@color/selector_stroke_color"
    app:hintTextColor="?attr/colorPrimary"
    android:textColorHint="@color/selector_hint_text_color"
    ...>

1
TextinputLayout içinde EditText'in altı çizili rengi nasıl değiştirilir? Odaklanmamış durumu kastediyorum. Bu grimsi var
Evgenii Vorobei

@EvgeniiVorobei Cevapta açıklanmıştır. İle tanımlanır boxStrokeColor. Örnekte selector_stroke_colorözellikle son satır:<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
Gabriele Mariotti

Çok teşekkür ederim! Kendi kendime çözemedim.
Evgenii Vorobei

benim sorunum ipucu renginin gri olmasını istiyorum ve edittext doldurulduktan sonra odaklansın ya da odaklanmasın turuncu olmasını istiyorum. odaklandığı zaman yapabiliyorum. ama olmadığı zaman bunu yapamaz. Yani chan sen bana yardım et @GabrieleMariotti
Anmol317

20

Bu özelliği Edittext etiketine ekleyin ve keyfini çıkarın:

 android:backgroundTint="@color/colorWhite"

5
efekt: API seviyesi 21 ve üzeri olan cihazlarda çizgi rengini değiştirir
Someone Somewhere

17

Bu Blog Gönderisi , çeşitli stil özelliklerini açıklar EditTextve AutoCompleteTextViewtamamlar TextInputLayout.

İçin EditTextve 22.1.0+ lib AppCompat bazı tema ile ilgili ayarları ile teması niteliğini ayarlayabilirsiniz:

<style name="StyledTilEditTextTheme">
   <item name="android:imeOptions">actionNext</item>
   <item name="android:singleLine">true</item>
   <item name="colorControlNormal">@color/greyLight</item>
   <item name="colorControlActivated">@color/blue</item>
   <item name="android:textColorPrimary">@color/blue</item>
   <item name="android:textSize">@dimen/styledtil_edit_text_size</item>
</style>

<style name="StyledTilEditText">
    <item name="android:theme">@style/StyledTilEditTextTheme</item>
    <item name="android:paddingTop">4dp</item>
</style>

ve aşağıdakilere uygulayın EditText:

<EditText
    android:id="@+id/etEditText"
    style="@style/StyledTilEditText"

Çünkü AutoCompleteTextViewişler daha karmaşıktır çünkü onu sarmak TextInputLayoutve bu temayı uygulamak yüzen etiket davranışını bozar. Bunu kodla düzeltmeniz gerekiyor:

private void setStyleForTextForAutoComplete(int color) {
    Drawable wrappedDrawable =     DrawableCompat.wrap(autoCompleteTextView.getBackground());
    DrawableCompat.setTint(wrappedDrawable, color);
    autoCompleteTextView.setBackgroundDrawable(wrappedDrawable);
}

ve içinde Activity.onCreate:

setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
autoCompleteTextView.setOnFocusChangeListener((v, hasFocus) -> {
    if(hasFocus) {
        setStyleForTextForAutoComplete(getResources().getColor(R.color.blue));
    } else {
        if(autoCompleteTextView.getText().length() == 0) {  
              setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
        }
    }
});

8

Eğer değiştirmek istiyorsanız bar / çizgi rengini ve ipucu metin rengi arasında TextInputLayout(vurgu rengi normalde ne), o zaman sadece bu stil oluşturmak:

<style name="MyStyle">
    <item name="colorAccent">@color/your_color</item>
</style>

Ardından bunu temaTextInputLayout olarak uygulamanıza uygulayın :

<android.support.design.widget.TextInputLayout
    ...
    app:theme="@style/MyStyle" />

Bu, temel olarak bir temayı (stili değil) tek bir görünüme (tüm aktivitenin aksine) ayarlar .


Min SDK'nız 21 olmalı
Azizjon Kholmatov

5
<style name="Widget.Design.TextInputLayout" parent="android:Widget">
    <item name="hintTextAppearance">@style/TextAppearance.Design.Hint</item>
    <item name="errorTextAppearance">@style/TextAppearance.Design.Error</item>
</style>

Düzen için bu stili geçersiz kılabilirsiniz

Ayrıca iç EditText öğesi stilini de değiştirebilirsiniz.


bu tarz nasıl kullanılır? Tüm uygulamanın stilini tek bir yerde geçersiz kılmanın bir yolu var mı?
Hanzala

5
<style name="EditScreenTextInputLayoutStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorControlNormal">@color/actionBar_background</item>
    <item name="colorControlActivated">@color/actionBar_background</item>
    <item name="colorControlHighlight">@color/actionBar_background</item>
    <item name="colorAccent">@color/actionBar_background</item>
    <item name="android:textColorHint">@color/actionBar_background</item>
</style>

bu stili TextInputLayout'a uygulayın


2
Stili TextInputLayout'a uygulamak için sadece hızlı bir not:android:theme="@style/EditScreenTextInputLayoutStyle"
jackycflau

5

bir TextinputLayout bir görünüm değil, ama bir Layoutçok güzel tarif ettiği, Dimitrios Tsigouris içinde burada yaptığı blog post . Bu nedenle, yalnızca Styleiçin olan a'ya ihtiyacınız yoktur Views, ancak a kullanın Theme. Blog gönderisinin ardından aşağıdaki çözümü buldum:

Senin başlayın styles.xmlile

<style name="TextInputLayoutAppearance" parent="Widget.Design.TextInputLayout">
        <!-- reference our hint & error styles -->
        <item name="android:textColor">@color/your_colour_here</item>
        <item name="android:textColorHint">@color/your_colour_here</item>
        <item name="colorControlNormal">@color/your_colour_here</item>
        <item name="colorControlActivated">@color/your_colour_here</item>
        <item name="colorControlHighlight">@color/your_colour_here</item>
</style>

Ve düzeninize ekleyin

<com.google.android.material.textfield.TextInputLayout
                android:theme="@style/TextInputLayoutAppearance"
...

1
Widget.MaterialComponents.TextInputLayout.OutlinedBox'ı ebeveynde kullanın
Sudip Sadhukhan
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.