天天看點

關于android動态切換app主題顔色方案

1. 在attr.xml中 聲明所需要的動态改變的顔色

<declare-styleable name="PagerSlidingTabStrip">

        <attr name="pstsIndicatorColor" format="color" />

        <attr name="pstsUnderlineColor" format="color" />

        <attr name="pstsDividerColor" format="color" />

        <attr name="pstsIndicatorHeight" format="dimension" />

        <attr name="pstsUnderlineHeight" format="dimension" />

        <attr name="pstsDividerPadding" format="dimension" />

        <attr name="pstsTabPaddingLeftRight" format="dimension" />

        <attr name="pstsScrollOffset" format="dimension" />

        <attr name="pstsTabBackground" format="reference" />

        <attr name="pstsShouldExpand" format="boolean" />

        <attr name="pstsTextAllCaps" format="boolean" />

    </declare-styleable>

2.在 stylesx.xml中 定義主題,給相應主題設定所需顔色值

<!--黑夜主題-->

    <style name="BaseAppThemeNight" parent="Theme.AppCompat.NoActionBar">

        <item name="colorPrimary">@color/bottom_navigation</item>

        <item name="colorPrimaryDark">@color/bottom_navigation</item>

        <item name="android:textColor">@color/black</item>

        <item name="android:background">@android:color/transparent</item>

        <item name="android:windowIsTranslucent">true</item>

        <item name="android:windowBackground">@android:color/transparent</item>

        <item name="bottom_navigation">@color/bottom_navigation</item>

        <item name="common_entire">@color/common_entire</item>

        <item name="common_background">@color/common_background</item>

        <item name="stress_selected">@color/stress_selected</item>

        <item name="icon_button_common">@color/icon_button_common</item>

        <item name="icon_button_clicked">@color/icon_button_clicked</item>

        <item name="content_background">@color/content_background</item>

        <item name="icon_button_clicked2">@color/icon_button_clicked2</item>

        <item name="info__click_avatar_strike">@color/info__click_avatar_strike</item>

        <item name="icon_button_normal">@color/icon_button_normal</item>

        <item name="important_fonts_title">@color/important_fonts_title</item>

        <item name="guide_fonts">@color/guide_fonts</item>

        <item name="secondary_fonts">@color/secondary_fonts</item>

        <item name="special_fonts">@color/special_fonts</item>

    </style>

3.layout.xml中引用色值

android:textColor="?attr/important_fonts_title"

android:background="?attr/common_entire"

4.在java代碼中引用色值

TypedArray array = mContext.getTheme().obtainStyledAttributes(new int[] {

                R.attr.important_fonts_title, //文字選中色

                R.attr.guide_fonts, //文字未選中色

                R.attr.stress_selected, //背景選中色

                R.attr.common_background, //背景未選中色

        });

        int important_fonts_title = array.getColor(0, R.color.white);

        int guide_fonts = array.getColor(1, R.color.white);

        int stress_selected = array.getColor(2, R.color.white);

        int common_background = array.getColor(3, R.color.white);

5.最後記得設定你需要的Activity設定動态主題

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

         setTheme(R.style.BaseAppThemeNight);

}

  或者直接設定application的主題