簡體   English   中英

如何更改新的TabLayout指示器顏色和高度

[英]How to change the new TabLayout indicator color and height

我正在玩新的android.support.design.widget.TabLayout ,並發現一個問題,在類定義中,沒有方法可以更改指示器顏色和默認高度。

做一些研究,發現默認指示顏色取自AppTheme。 具體來自這里:

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

現在,在我的情況下,如果我更改colorAccent ,它將影響使用此值作為背景顏色的所有其他視圖,例如ProgressBar

現在有沒有辦法將indicatorColor更改為除colorAccent之外的其他東西?

遇到新的TabLayout使用值colorAccent的指示器顏色的colorAccent ,我決定深入研究android.support.design.widget.TabLayout實現,發現沒有公共方法來自定義它。 但是我找到了TabLayout的這個樣式規范:

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

有了這個樣式規范,現在我們可以像這樣自定義TabLayout:

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

問題解決了,標簽指示器顏色和高度都可以從默認值更改。

使用設計支持庫,您現在可以在xml中更改它們:

要更改TabLayout指示符的顏色

app:tabIndicatorColor="@color/color"

要更改TabLayout指標的高度

app:tabIndicatorHeight="4dp"

由於我無法發布Android開發人員評論的后續內容,因此以下是需要以編程方式設置所選標簽指示顏色的其他人的更新答案:

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

同樣,對於身高:

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

這些方法最近才被添加到支持庫的修訂版23.0.0中 ,這就是Soheil Setayeshi的答案使用反射的原因。

app:tabIndicatorColor="@android:color/white"

使用設計支持庫v23,您可以通過編程方式設置顏色和高度。

只需使用高度:

TabLayout.setSelectedTabIndicatorHeight(int height)

這里是官方的javadoc

只需使用顏色:

TabLayout.setSelectedTabIndicatorColor(int color)

這里是官方的javadoc

您可以在此處找到Google Tracker中的信息。

要以編程方式更改指示器顏色和高度,您可以使用反射。 例如,對於下面的指示器顏色使用代碼:

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

並更改指標高度使用“setSelectedIndicatorHeight”而不是“setSelectedIndicatorColor”然后按您所需的高度調用它

Foto指針使用此:

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

來自xml:

app:tabIndicatorColor="#fff"

來自java:

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

您可以使用xml更改此設置

app:tabIndicatorColor="#fff"

只需將此行放在代碼中即可。 如果更改顏色,請更改括號中的顏色值。

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

Android讓它變得簡單。

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

所以,我們只是說

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

這將給我們一個藍色的正常顏色和紫色選擇的顏色。

現在我們設定高度

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

而對於身高我們說

mycooltablayout.setSelectedIndicatorHeight(6);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM