Appcompat v7 ile EditText alt çizgi rengini değiştirme


310

Android 5 ve daha düşük sürümlerde tutarlı bir görünüm elde etmek için appcompat v7 kullanıyorum. Oldukça iyi çalışıyor. Ancak EditTexts için alt çizgi rengini ve vurgu rengini nasıl değiştireceğimi anlayamıyorum. Mümkün mü?

Özel android:editTextStyle(aşağıda referans) tanımlamaya çalıştım ama sadece tam arka plan rengini veya metin rengini değiştirmeyi başardım, ancak alt çizgiyi veya vurgu rengini değiştiremedim. Kullanılacak belirli bir özellik değeri var mı? android:backgroundözelliği ile özel bir çekilebilir görüntü kullanmak zorunda mıyım ? hexa'da renk belirtmek mümkün değil mi?

 <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:editTextStyle">@style/Widget.App.EditText</item>
 </style>

 <style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
     ???
 </style>

Android API 21 kaynaklara göre, malzeme tasarımı ile EditTexts kullanmak gibi colorControlActivatedve colorControlNormal. Bu nedenle, önceki stil tanımında bu özellikleri geçersiz kılmaya çalıştım, ancak hiçbir etkisi yok. Muhtemelen appcompat kullanmıyor. Ne yazık ki, malzeme tasarımıyla uygulamanın son sürümünün kaynaklarını bulamıyorum.


düzenleme metni için temanızı tanımlayın
Meenal

Öneriniz için teşekkür ederim ama bunu zaten yaptım. Daha önce yapmaya çalıştığım şeyi göstermek için sorumu güncelledim. Benim sorunum düzenleme metin alt satır rengini değiştirmek için tema stilinde kullanılacak öznitelik hakkında. İdeal olarak, hexa rengini doğrudan belirleyebileceğim bir çözüm arıyorum.
Laurent

Bu cevapların hiçbiri 4.3 üzerinde benim için çalışmıyor. Çalışan bir çözümünüz var mı?
Robert Baker

AppCompatEditTextGörünüşe göre uzatmak zorundaydım .
16:19, EpicPandaForce

Yanıtlar:


479

Sonunda bir çözüm buldum. Bu sadece karşılığını geçersiz kılma oluşur colorControlActivated, colorControlHighlightve colorControlNormalsenin EditText tarzı uygulama tema tanımında değil. Ardından, bu temayı istediğiniz herhangi bir etkinlik için kullanmayı düşünün. Aşağıda bir örnek verilmiştir:

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">@color/accent</item>
    <item name="colorControlHighlight">@color/accent</item>
</style>

9
Menü hamburgerinin rengini, geri düğmesini ve kaydırma çubuğunun colorControlNormal olarak değiştiğini görüyorum.
ario

11
Bu, alt çizginin rengini değiştirir, ancak onay kutuları, radyo düğmeleri vb. Gibi diğer tüm kontrolleri de değiştirir. Tek bir EditText (benim gibi) alt satırını değiştirmek istiyorsanız o zaman o EditText için android: background özelliğini geçersiz kılmak zorunda. AFAIK'in başka yolu yok.
Emanuel Moecklin

68
Eğer AppCompat V22 destek kitaplığı kullanıyorsanız, sizin gibi EditText içinde tema belirtebilirsiniz: android:theme="@style/Theme.App.Base. Bu, stilin, düzenlerinizdeki değiştirmek istemediğiniz diğer görünümleri de etkilememesini sağlar.
Alex Lockwood

8
Jelly Bean (4.2) üzerinde çalışmak ama Lollipop çalıştı vermedi
Mangesh

3
Etkinlik miras almalıdır AppCompatActivity. Eğer miras alınırsa çalışmaz Activity.
Bharathwaaj

187

Birisinin sadece tek bir düzenleme metnini değiştirmek istemesi durumunda bunun bir cevaba ihtiyacı olduğunu hissettim. Bunu şöyle yaparım:

editText.getBackground().mutate().setColorFilter(ContextCompat.getColor(context, R.color.your_color), PorterDuff.Mode.SRC_ATOP);

1
Ama nasıl varsayılan arka plana sıfırlayabilir, ben lollipop üzerinde editText.getBackground (). ResetColorFilter () çağırdıktan sonra bir sürü hata var mı?
ultraon

Dikkat! Bunu eklemek TÜM uygulama genelinde editText öğesinin renginin değişmesine neden olabilir. Nexus 5. üzerinde test edilmiştir. OS 6.0.1.
Alex Perevozchykov

1
@AlexPerevozchykov haklı olabilirsiniz. .GetBackground () öğesinden sonra .mutate () öğesini eklemeyi deneyin. Bunu yapmalı.
hordurh

@hordurh evet, öyleydi, bu öneriyi daha önce aldım, çekilebilir bir havuzu paylaşıyorum, bu yüzden değiştirmeden önce onu mutasyona
uğratmamız

1
Edittext kullanırsanız, işe yarıyor ama bu yöntem lolipop üzerinde uygulama uyumlu edittext ile çalışmıyor. sorunu nasıl çözebilirim biliyor musunuz?
Selin

145

İken Laurents çözüm doğrudur, bu alt satırında sadece beri açıklamalarda belirtildiği gibi bazı sakıncaları ile gelir EditTextrenkli olur ama Geri Düğmesi Toolbar, CheckBoxeshem vb.

Neyse ki v22.1içinde appcompat-v7bazı yeni olanaklar sundu. Artık yalnızca bir görünüme belirli bir tema atamak mümkün. Doğrudan Changelog'dan :

Uygulamanın kullanımdan kaldırılması: Stil Araç Çubuğu için tema. Artık android: temayı tüm API seviye 7 ve üstü cihazlarda araç çubukları için ve android: tema desteği API seviyesi 11 ve üstü cihazlarda tüm widget'lar için kullanabilirsiniz.

Bu nedenle, global bir temada istenen rengi ayarlamak yerine, yeni bir tema oluşturup yalnızca EditText.

Misal:

<style name="MyEditTextTheme">
    <!-- Used for the bottom line when not selected / focused -->
    <item name="colorControlNormal">#9e9e9e</item>
    <!-- colorControlActivated & colorControlHighlight use the colorAccent color by default -->
</style>

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/MyEditTextTheme"/>

1
Bunun gerekli olduğunu düşünmüyorum. colorControlNormalandroid öneki olmadan widget'ı renklendirmek için appcompat yöntemini kullanır, önek ile sistem yöntemine geri döner ve bu sadece API 21+ cihazlarında kullanılabilir.
Ters

hmm, lolipop cihazımda test ettim ve android ad alanı ile v21 stillerinde uygulamadığınız sürece özel renk tonunu almayacak.
user2968401

22.2.0
AppCompat

1
<item name = "colorAccent"> # 000000 </item> kullanarak colorControlNormal yerine benim için çalıştı.
MikeOscarEcho

Uygulamada yalnızca bir düzenleme metnini değiştirmek için mükemmel! (Tam olarak ihtiyacım olan şey! Teşekkürler)
Romain Barbier

99

Bu XML'de aşağıdakiler kullanılarak değiştirilebilir:

Referans API> = 21 uyumluluk için şunları kullanın:

android:backgroundTint="@color/blue"

Geriye dönük API <21 uyumluluğu için:

app:backgroundTint="@color/blue"

10
Evet, ancak bu sadece android API 21+ (kitkat ve lolipop) sürümlerinde çalışır. Muhtemelen geriye dönük uyumlu bir çözüm yaratmaya çalışabiliriz.
DaMachk

12
Geriye dönük uyumlu destek backgroundTint="@color/blue"yerine kullanınandroid:backgroundTint="@color/blue"
Kishan Vaghela

11
@KishanVaghela, kullanmak yerine android:backgroundTint="@color/blue", kullanımı app:backgroundTint="@color/blue"Yorumlarınız için destek ön Lollipop cihazlara sayesinde!
blueware

2
@blueware Eğer tarzda kullanmak istiyorsanız, o zaman "app" kullanmanız gerekmez.
Kishan Vaghela

tools:ignore="MissingPrefix"kırmızı altı çizili pop altında ekleapp:backgroundTint="<your color>"
Moses Aprico

47

İşte API <21 ve üstü için çözüm

Drawable drawable = yourEditText.getBackground(); // get current EditText drawable 
drawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); // change the drawable color

if(Build.VERSION.SDK_INT > 16) {
    yourEditText.setBackground(drawable); // set the new drawable to EditText
}else{
    yourEditText.setBackgroundDrawable(drawable); // use setBackgroundDrawable because setBackground required API 16
}

resim açıklamasını buraya girin

Umarım yardımcı olur


Geç cevap verdiğim için üzgünüm. Ben destek kütüphanede yine bu kodu kontrol var 24.2.1, 25.1.1, 25.2.0cihazın <21 ve> 21 için ve hala çalışıyor. Lütfen bu basit demo sürücüsünü kontrol edin . Google.com/file/d/0B_poNaia6t8kSzU3bDFVazRSSDA/… . Bu kodun sizin için neden çalışmadığını bilmiyorum, lütfen bana bildirin. teşekkür ederim
Phan Van Linh

@Renjith geç cevap için özür dilerim, lütfen yukarıdaki yorumuma bakın
Phan Van Linh

Bu kodla rengi varsayılana nasıl sıfırlarsınız?
Nefta

35

Kabul edilen cevap, stil temeline göre biraz daha fazladır, ancak yapılacak en verimli şey, AppTheme stilinize colorAccent niteliğini şu şekilde eklemektir :

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:editTextStyle">@style/EditTextStyle</item>
</style>

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>

ColorAccent özelliği, uygulama genelinde widget renklendirme için kullanılır ve bu nedenle tutarlılık için kullanılmalıdır


8
@Tomasz, ana tema API 7'ye kadar giden AppCompat olduğundan API 21+ için gerekli değildir
TanmayP

Ughhh. Bunun için teşekkürler, name="android:colorAccent"yanlışlıkla kullanıyordum
Jules

29

Eğer widget'larınızı renklendirmek için DrawableCompatappcompat-v7:22.1.0+ kullanabilirsiniz

    public static void tintWidget(View view, int color) {
        Drawable wrappedDrawable = DrawableCompat.wrap(view.getBackground());
        DrawableCompat.setTint(wrappedDrawable.mutate(), getResources().getColor(color));
        view.setBackgroundDrawable(wrappedDrawable);
    }

ne cankurtaran bu harika, bir utanç o iyi bilmiyorum
pt123

Lütfen aşağı gidin ve tasarım kütüphanesi 23.2.0 için cevabımı görün. Bu yöntem şu anda işe yaramaz.
ywwynm

21

kullanın:

<EditText
    app:backgroundTint="@color/blue"/>

Bu sadece Lollipop öncesi cihazları destekleyecek +21


@ powder366, uygulamanızın ana temasını gönderebilir misiniz?
blueware

1
<style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar">
powder366

2
@ powder366, şunu deneyin: <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">ve işe
yaramalı

19

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

    <item name="colorControlNormal">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorAccent</item>

</style>


İşe yarıyor! Soru sorduğu gibi, stil / tema içinde çözülmelidir, bu doğru cevap olmalıdır.
Ninja

Katılıyorum. küresel bir çözüm olduğu için doğru cevap bu olmalı
Santacrab

Farklı kontroller farklı renklere ihtiyaç duyuyorsa bu elverişsizdir.
Julius

12

Sorununuz için hızlı bir çözüm, youpppackage / build / ara / / exploded-aar / com.android.support / appcompat-v7 / res / drawable / abc_edit_text_material.xml dosyasına bakmak ve bu xml dosyasını çekilebilir klasörünüze kopyalamaktır. Ardından, tercihlerinize uyacak şekilde 9 yama dosyasının rengini bu seçicinin içinden değiştirebilirsiniz.


9

Sadece android:backgroundTintözellik eklemek çok kolaydır EditText.

android:backgroundTint="@color/blue"
android:backgroundTint="#ffffff"
android:backgroundTint="@color/red"


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

2
API Kaldıraç 21'in üstünde backgroundTint
Ashwin H

ViewCompat.setBackgroundTintList (editText, ColorStateList.valueOf (Color.YELLOW))
Arst

1
app:backgroundTint="@color/blue"tüm api seviyelerinde çalışır .. ne olursa olsun XD seçildiğinde hala farklı bir renge dönüyor
EpicPandaForce

8

TextInputLayoutDestek tasarım kitaplığındaki ( sürüm 23.2.0 için UPDATED ) kaynak kodun bir kısmı, EditTextalt satır rengini daha basit bir şekilde değiştirir:

private void updateEditTextBackground() {
    ensureBackgroundDrawableStateWorkaround();

    final Drawable editTextBackground = mEditText.getBackground();
    if (editTextBackground == null) {
        return;
    }

    if (mErrorShown && mErrorView != null) {
        // Set a color filter of the error color
        editTextBackground.setColorFilter(
                AppCompatDrawableManager.getPorterDuffColorFilter(
                        mErrorView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
    }
    ...
}

Rengi programlı olarak değiştirmek istiyorsanız, yukarıdaki kodların tümü 23.2.0'da şu anda işe yaramaz gibi görünüyor.

Ve tüm platformları desteklemek istiyorsanız, işte benim yöntemim:

/**
 * Set backgroundTint to {@link View} across all targeting platform level.
 * @param view the {@link View} to tint.
 * @param color color used to tint.
 */
public static void tintView(View view, int color) {
    final Drawable d = view.getBackground();
    final Drawable nd = d.getConstantState().newDrawable();
    nd.setColorFilter(AppCompatDrawableManager.getPorterDuffColorFilter(
            color, PorterDuff.Mode.SRC_IN));
    view.setBackground(nd);
}

AppCompatDrawableManager nedir? setBackground API 16 gerektirir.
CoolMind

8

Ben de bu soruna çok uzun süre bağlı kaldım.

V21'in üstündeki ve altındaki sürümler için çalışan bir çözüme ihtiyacım vardı.

Sonunda çok basit, belki de ideal değil ama etkili bir çözüm keşfettim: Arka plan rengini transparentEditText özelliklerinde ayarlayın.

<EditText
    android:background="@android:color/transparent"/>

Umarım bu biraz zaman kazandırır.


1
Bu, tüm arka plan rengini değiştiriyor ve yalnızca alt çizgi rengini değiştirmek istiyoruz.
shahzain ali

@shahzain ali EditText'in Alt Çizgisi bir arka plan. Eğer null değerine ayarlarsanız gitti. Ve bu yüzden backgroundTint işe yarayacak (ancak etkinleştirildiğinde renk değişmeyecek)
nyconing

7

Benim için hem AppTheme hem de bir colors.xml değeri değiştirdim Hem colorControlNormal hem de colorAccent, EditText kenarlık rengini değiştirmeme yardımcı oldu. İmlecin yanı sıra "|" bir EditText içindeyken.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorControlNormal">@color/yellow</item>
    <item name="colorAccent">@color/yellow</item>
</style>

İşte renkler.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#B7EC2A</color>
</resources>

EditText stilinin içine yerleştirdiğim @null için android: textCursorDrawable özniteliğini çıkardım. Bunu kullanmayı denediğimde renkler değişmezdi.


2
Bu cevap olmalı
Mina Samy

Bir cazibe gibi çalıştı. Thanks
Däñish Shärmà

6

Bunu yapmak için düzenleme metninin arka planını sol, sağ ve üstte eksi dolgu ile bir dikdörtgene ayarlayabilirsiniz. İşte xml örneği:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#6A9A3A"/>
        </shape>
    </item>
</layer-list>

Odaklanmış düzenleme metni için farklı genişlik ve renk sağlamak istiyorsanız şekli bir seçiciyle değiştirin.


5

Activit.XML'de kodu ekleyin

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/editText"
        android:hint="Informe o usuário"
        android:backgroundTint="@android:color/transparent"/>

BackgroundTint=colorİstediğiniz renk için nerede


5

Bu yöntemi PorterDuff ile çizginin rengini başka çekilebilir olmadan değiştirmek için kullanıyorum.

public void changeBottomColorSearchView(int color) {
    int searchPlateId = mSearchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
    View searchPlate = mSearchView.findViewById(searchPlateId);
    searchPlate.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}

Basit bir EditText'in alt satırına erişmek için benzer bir tanımlayıcı var mı?
Rémi P

4

Alt çizgiyi uygulama renkleri kullanmadan değiştirmek istiyorsanız, temanızda şu satırları kullanın:

<item name="android:editTextStyle">@android:style/Widget.EditText</item>
<item name="editTextStyle">@android:style/Widget.EditText</item>

Başka bir çözüm bilmiyorum.


4

2 günlük mücadeleden sonra bu soruna çalışan bir çözüm hazırladım, aşağıdaki çözüm sadece birkaç düzenleme metnini değiştirmek, java kodu ile rengi değiştirmek / değiştirmek ve işletim sistemi sürümlerinde farklı davranış sorunlarının üstesinden gelmek isteyenler için mükemmel setColorFilter () yöntemi kullanıldığından.

    import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.AppCompatDrawableManager;
import android.support.v7.widget.AppCompatEditText;
import android.util.AttributeSet;
import com.newco.cooltv.R;

public class RqubeErrorEditText extends AppCompatEditText {

  private int errorUnderlineColor;
  private boolean isErrorStateEnabled;
  private boolean mHasReconstructedEditTextBackground;

  public RqubeErrorEditText(Context context) {
    super(context);
    initColors();
  }

  public RqubeErrorEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    initColors();
  }

  public RqubeErrorEditText(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initColors();
  }

  private void initColors() {
    errorUnderlineColor = R.color.et_error_color_rule;

  }

  public void setErrorColor() {
    ensureBackgroundDrawableStateWorkaround();
    getBackground().setColorFilter(AppCompatDrawableManager.getPorterDuffColorFilter(
        ContextCompat.getColor(getContext(), errorUnderlineColor), PorterDuff.Mode.SRC_IN));
  }

  private void ensureBackgroundDrawableStateWorkaround() {
    final Drawable bg = getBackground();
    if (bg == null) {
      return;
    }
    if (!mHasReconstructedEditTextBackground) {
      // This is gross. There is an issue in the platform which affects container Drawables
      // where the first drawable retrieved from resources will propogate any changes
      // (like color filter) to all instances from the cache. We'll try to workaround it...
      final Drawable newBg = bg.getConstantState().newDrawable();
      //if (bg instanceof DrawableContainer) {
      //  // If we have a Drawable container, we can try and set it's constant state via
      //  // reflection from the new Drawable
      //  mHasReconstructedEditTextBackground =
      //      DrawableUtils.setContainerConstantState(
      //          (DrawableContainer) bg, newBg.getConstantState());
      //}
      if (!mHasReconstructedEditTextBackground) {
        // If we reach here then we just need to set a brand new instance of the Drawable
        // as the background. This has the unfortunate side-effect of wiping out any
        // user set padding, but I'd hope that use of custom padding on an EditText
        // is limited.
        setBackgroundDrawable(newBg);
        mHasReconstructedEditTextBackground = true;
      }
    }
  }

  public boolean isErrorStateEnabled() {
    return isErrorStateEnabled;
  }

  public void setErrorState(boolean isErrorStateEnabled) {
    this.isErrorStateEnabled = isErrorStateEnabled;
    if (isErrorStateEnabled) {
      setErrorColor();
      invalidate();
    } else {
      getBackground().mutate().clearColorFilter();
      invalidate();
    }
  }
}

XML olarak kullanır

<com.rqube.ui.widget.RqubeErrorEditText
            android:id="@+id/f_signup_et_referral_code"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toEndOf="@+id/referral_iv"
            android:layout_toRightOf="@+id/referral_iv"
            android:ems="10"
            android:hint="@string/lbl_referral_code"
            android:imeOptions="actionNext"
            android:inputType="textEmailAddress"
            android:textSize="@dimen/text_size_sp_16"
            android:theme="@style/EditTextStyle"/>

Şık çizgiler ekleyin

<style name="EditTextStyle" parent="android:Widget.EditText">
    <item name="android:textColor">@color/txt_color_change</item>
    <item name="android:textColorHint">@color/et_default_color_text</item>
    <item name="colorControlNormal">@color/et_default_color_rule</item>
    <item name="colorControlActivated">@color/et_engagged_color_rule</item>
  </style>

rengi değiştirmek için java kodu

myRqubeEditText.setErrorState(true);
myRqubeEditText.setErrorState(false);

2

Kesinlikle bu sorundan şaşkına döndüm. Bu iş parçacığında ve diğerlerinde her şeyi denedim, ancak ne yaptığım önemli değil, alt çizginin rengini varsayılan maviden başka bir şeye değiştiremedim.

Sonunda neler olduğunu anladım. android.widget.EditTextYeni bir örnek yaparken (yanlış) kullanıyordum (ancak bileşenlerimin geri kalanı appcompat kütüphanesinden geliyordu). Kullanmalıydım android.support.v7.widget.AppCompatEditText. Ben yerini new EditText(this)ile new AppCompatEditText(this) ve problem anında çözüldü. Görünüşe göre, eğer gerçekten kullanıyorsanız AppCompatEditText, accentColortemanızdan (yukarıdaki birkaç yorumda belirtildiği gibi) saygı gösterecektir ve ek yapılandırma gerekmez.


2

Bu en kolay ve en verimli / yeniden kullanılabilir / tüm API'larda çalışır
Aşağıdaki gibi özel bir EditText sınıfı oluşturun:

public class EditText extends android.widget.EditText {
    public EditText(Context context) {
        super(context);
        init();
    }

    public EditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public EditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        getBackground().mutate().setColorFilter(ContextCompat.getColor(getContext(), R.color.colorAccent), PorterDuff.Mode.SRC_ATOP);
    }
}

Sonra şu şekilde kullanın:

 <company.com.app.EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"/>

2

EditText arka plan dinamik olarak değişecek kullanabilirsiniz ColorStateList .

int[][] states = new int[][] {
    new int[] { android.R.attr.state_enabled}, // enabled
    new int[] {-android.R.attr.state_enabled}, // disabled
    new int[] {-android.R.attr.state_checked}, // unchecked
    new int[] { android.R.attr.state_pressed}  // pressed
};

int[] colors = new int[] {
    Color.BLACK,
    Color.RED,
    Color.GREEN,
    Color.BLUE
};

ColorStateList colorStateList = new ColorStateList(states, colors);

Kredi: ColorStateList hakkındaki bu SO yanıtı harika .


Hangi yöntemi kullanmalı? setBackgroundTintList? API 21 gerektirir.
CoolMind

Eski API sürümleri için setSupportBackgroundTintList .
Ankit Popli

0

app:backgroundTintApi seviyesi 21'in altına ekleyin . Aksi takdirde kullanın android:backgroundTint.

Api seviye 21'in altında.

<EditText
     android:id="@+id/edt_name"
     android:layout_width="300dp"
     android:layout_height="wrap_content"
     android:textColor="#0012ff"
     app:backgroundTint="#0012ff"/>

API seviye 21'den yüksek için.

<EditText
     android:id="@+id/edt_name"
     android:layout_width="300dp"
     android:layout_height="wrap_content"
     android:textColor="#0012ff"
     android:backgroundTint="#0012ff"/>

-2

Lütfen bu yöntemi ihtiyacınıza göre değiştirin. Bu benim için çalıştı!

  private boolean validateMobilenumber() {
        if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
            input_layout_mobilenumber.setErrorEnabled(true);
            input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
           // requestFocus(mobilenumber);
            return false;
        } else {
            input_layout_mobilenumber.setError(null);
            input_layout_mobilenumber.setErrorEnabled(false);
            mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
        }
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.