1. ホーム
  2. android

[解決済み] TabLayoutのインジケーターの色と高さを変更する方法

2022-06-25 01:42:11

質問

私は、新しい android.support.design.widget.TabLayout で遊んでいて、問題を見つけました。クラス定義では、インジケータの色とデフォルトの高さを変更するメソッドがありません。

調べてみると、デフォルトのインジケーターの色は、AppThemeから取得されていることがわかりました。具体的には、ここからです。

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

さて、私の場合、このように colorAccent を変更すると、この値を背景色として使用している他のすべてのビュー、たとえば ProgressBar に影響を及ぼします。

さて、indicatorColorを以下のように他のものに変更する方法はありますか? colorAccent ?

どのように解決するのですか?

新しいTabLayoutが、インジケータの色を値 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"/>

そして問題は解決し、タブインジケータの色と高さの両方をデフォルト値から変更することができます。