Yeni TabLayout gösterge rengi ve yüksekliği nasıl değiştirilir


124

Yeni ile oynuyordum android.support.design.widget.TabLayout ve bir sorun buldum, sınıf tanımında gösterge rengini ve varsayılan yüksekliği değiştirmenin hiçbir yöntemi yok.

Biraz araştırma yaparak, varsayılan gösterge renginin AppTheme'den alındığı bulundu. Özellikle buradan:

<item name="colorAccent">#FF4081</item>

Şimdi, benim durumumda, değerini değiştirirsem, colorAccentbu değeri arka plan rengi olarak kullanan diğer tüm görünümleri etkileyecektir, örneğin ProgressBar

Şimdi, göstergeColor'u başka bir şeye değiştirmenin bir yolu var colorAccentmı?

Yanıtlar:


250

Yeni TabLayout'un değerden gösterge rengini kullanması sorununu yaşarken colorAccent, android.support.design.widget.TabLayoutuygulamayı özelleştirmeye karar verdim ve bunu özelleştirmek için genel yöntemler olmadığını buldum. Ancak TabLayout'un bu stil özelliğini buldum:

<style name="Base.Widget.Design.TabLayout" parent="android:Widget">
    <item name="tabMaxWidth">@dimen/tab_max_width</item>
    <item name="tabIndicatorColor">?attr/colorAccent</item>
    <item name="tabIndicatorHeight">2dp</item>
    <item name="tabPaddingStart">12dp</item>
    <item name="tabPaddingEnd">12dp</item>
    <item name="tabBackground">?attr/selectableItemBackground</item>
    <item name="tabTextAppearance">@style/TextAppearance.Design.Tab</item>
    <item name="tabSelectedTextColor">?android:textColorPrimary</item>
</style>

Bu stil spesifikasyonuna sahip olarak, şimdi TabLayout'u şu şekilde özelleştirebiliriz:

<android.support.design.widget.TabLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@id/pages_tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:tabIndicatorColor="@android:color/white"
    app:tabIndicatorHeight="4dp"/>

Ve sorun çözüldü, hem sekme göstergesi rengi hem de yüksekliği varsayılan değerlerinden değiştirilebilir.


5
java kodu aracılığıyla 'tabSelectedTextColor'u (sekme göstergesi rengi veya yüksekliği değil) değiştirmenin bir yolu var mı?
Prakash

2
tabLayout xml widget'ındaki app: tabIndicatorColor özniteliği, bu sorunu düzeltmek için yapmam gereken tek değişiklik. Teşekkürler!
Braden Holt

Bunu ebeveyn stili olarak yaptım:parent="@style/Base.Widget.Design.TabLayout"
Ultimo_m

Bu çözümün yasal olduğu anlaşılıyor
Nikhil

101

Tasarım destek kitaplığıyla artık bunları xml'de değiştirebilirsiniz:

TabLayout göstergesinin rengini değiştirmek için :

app:tabIndicatorColor="@color/color"

TabLayout göstergesinin yüksekliğini değiştirmek için :

app:tabIndicatorHeight="4dp"

4
Bu satırı koydum ama renk hala vurgu rengi
Mehdi

@Kenji, bu satırın xml’nin Araç Çubuğu bitine değil de TabLayout’a yerleştirildiğinden emin misiniz? Kolay yanlış yerleştirme yapmak :)
Wes Winn

Yükseklik için mükemmel çözüm. İyi çalışıyor. Teşekkürler Malek.
Hardik Joshi

1
Ya bunun yerine bir gradyan rengi uygulamak istersem?
hamza khan

35

Android geliştiricisinin yorumunu takip edemediğimden , seçili sekme gösterge rengini programlı olarak ayarlaması gereken diğer herkes için güncellenmiş bir cevap:

tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF"));

Benzer şekilde, yükseklik için:

tabLayout.setSelectedTabIndicatorHeight((int) (2 * getResources().getDisplayMetrics().density));

Bu yöntemler , Destek Kitaplığı'nın 23.0.0 revizyonuna yeni eklendi , bu nedenle Soheil Setayeshi'nin cevabı yansıma kullanıyor.


2
setSelectedTabIndicatorHeight artık kullanımdan kaldırıldı, şimdi ne kullanacağınıza dair bir fikriniz var mı?
Michalsx


13

İle desing destek kitaplığı V23 programlı rengini ve yüksekliğini ayarlayabilirsiniz.

Sadece yükseklik için kullanın:

TabLayout.setSelectedTabIndicatorHeight(int height)

İşte resmi javadoc .

Sadece renk için kullanın:

TabLayout.setSelectedTabIndicatorColor(int color)

İşte resmi javadoc .

Burada bilgileri Google Tracker'da bulabilirsiniz .


Renk için hangi tam sayıları kullanmamız gerekiyor?
the_prole

Sen örnek Color.red için renk sınıfını kullanabilirsiniz
Soumya

setSelectedTabIndicatorHeight artık kullanımdan kaldırıldı
APP

9

Gösterge rengini ve yüksekliğini programlı olarak değiştirmek için yansımayı kullanabilirsiniz. örneğin gösterge rengi için aşağıdaki kodu kullanın:

        try {
            Field field = TabLayout.class.getDeclaredField("mTabStrip");
            field.setAccessible(true);
            Object ob = field.get(tabLayout);
            Class<?> c = Class.forName("android.support.design.widget.TabLayout$SlidingTabStrip");
            Method method = c.getDeclaredMethod("setSelectedIndicatorColor", int.class);
            method.setAccessible(true);
            method.invoke(ob, Color.RED);//now its ok
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

ve gösterge yüksekliğini değiştirmek için "setSelectedIndicatorColor" yerine "setSelectedIndicatorHeight" kullanın ve ardından istediğiniz yüksekliğe göre çağırın


1
Teşekkür ederim! bu bana yardımcı oluyor! Sanırım Google, destek kitaplığında bunun için yöntem sağlamayı unuttu.
Shinta S

1
Halihazırda genel işlevler olarak mevcutsa neden yansımayı kullanalım? developer.android.com/reference/android/support/design/widget/…
android geliştirici

@SoheilSetayeshi Oh, tamam. Teşekkür ederim. Belki o zaman cevabı güncellemelisin.
android geliştiricisi

1
Ancak bu, destek kitaplığı 23.0.0'ın altındaki API'ler için mükemmel bir çözümdür. Yani Whaao! Mükemmel cevap!
sud007

6

Foto göstergesi şunu kullan:

 tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.colorWhite));//put your color

6

xml'den:

app:tabIndicatorColor="#fff"

Java'dan:

tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF"));
tabLayout.setSelectedTabIndicatorHeight((int) (2 * getResources().getDisplayMetrics().density));


0

Sadece bu satırı kodunuza ekleyin. Rengi değiştirirseniz, parantez içindeki renk değerini değiştirin.

tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FFFFFF"));

0

Android bunu kolaylaştırır.

public void setTabTextColors(int normalColor, int selectedColor) {
    setTabTextColors(createColorStateList(normalColor, selectedColor));
}

Bu yüzden sadece diyoruz

mycooltablayout.setTabTextColors(Color.parseColor("#1464f4"), Color.parseColor("#880088"));

Bu bize mavi normal bir renk ve mor seçilmiş bir renk verecektir.

Şimdi yüksekliği ayarlıyoruz

public void setSelectedTabIndicatorHeight(int height) {
    mTabStrip.setSelectedIndicatorHeight(height);
}

Ve yükseklik için diyoruz

mycooltablayout.setSelectedIndicatorHeight(6);
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.