安卓实现日夜模式

来源:互联网 发布:手机网络赛车游戏 编辑:程序博客网 时间:2024/04/19 14:44

安卓实现日夜模式只需三步:

一. 配置需要日夜模式的属性及定义日夜主题

attr.xml中配置如下:

<attr name="toolbarColor" format="color"/>    <attr name="cardViewColor" format="color"/>    <attr name="cardViewTextSelColor" format="color"/>    <attr name="cardViewTextUnselColor" format="color"/>    <attr name="backgroundColor" format="color"/>    <attr name="navHeaderColor" format="color"/>    <attr name="navMenuTextColor" format="color"/>    <attr name="navMenuItemSelector" format="reference"/>    <attr name="navIcon" format="reference"/>    <attr name="navBackIcon" format="reference"/>    <attr name="overFlowIcon" format="reference"/>


styles.xml中配置主题

<style name="DayTheme" parent="Theme.AppCompat.Light.NoActionBar">        <!-- Customize your theme here. -->        <item name="colorPrimary">@color/colorDayPrimary</item>        <item name="colorPrimaryDark">@color/colorDayPrimaryDark</item>        <item name="colorAccent">@color/colorDayAccent</item>        <item name="android:windowBackground">@color/colorDayWindowBackground</item>        <item name="toolbarColor">@color/colorDayPrimary</item>        <item name="cardViewColor">@color/colorDayCardView</item>        <item name="cardViewTextUnselColor">@color/colorDayCardViewTextUnsel</item>        <item name="cardViewTextSelColor">@color/colorDayCardViewTextSel</item>        <item name="navHeaderColor">@color/colorDayNavHeader</item>        <!--<item name="navMenuItemDaySelector">@drawable/drawer_menu_item_day_selector</item>-->        <item name="navMenuTextColor">@color/colorDayNavMenuText</item>        <item name="backgroundColor">@color/colorDayWindowBackground</item>        <!--<item name="bannerTitleColor">@color/colorDayBannerTitle</item>-->    </style>    <style name="NightTheme" parent="Theme.AppCompat.Light.NoActionBar">        <!-- Customize your theme here. -->        <item name="colorPrimary">@color/colorNightPrimary</item>        <item name="colorPrimaryDark">@color/colorNightPrimaryDark</item>        <item name="colorAccent">@color/colorNightAccent</item>        <item name="android:windowBackground">@color/colorNightWindowBackground</item>        <item name="toolbarColor">@color/colorNightPrimary</item>        <item name="cardViewColor">@color/colorNightCardView</item>        <item name="cardViewTextUnselColor">@color/colorNightCardViewTextUnsel</item>        <item name="cardViewTextSelColor">@color/colorNightCardViewTextSel</item>        <item name="navHeaderColor">@color/colorNightNavHeader</item>        <!--<item name="navMenuItemNightSelector">@drawable/drawer_menu_item_night_selector</item>-->        <item name="navMenuTextColor">@color/colorNightNavMenuText</item>        <item name="backgroundColor">@color/colorNightWindowBackground</item>        <!--<item name="bannerTitleColor">@color/colorNightBannerTitle</item>-->    </style>



二. 代码调用setTheme方法,将配置的主题属性放进去

String currenTheme = ThemeUtil.getInstance(this).getTheme();//获取sharePreference保存的主题switch (currenTheme) {    case Constants.Theme.DAY_THEME:menuItem.setTitle(getResources().getString(R.string.action_switch_day));setTheme(R.style.NightTheme);ThemeUtil.getInstance(this).setTheme(Constants.Theme.NIGHT_THEME);changeTheme();break;    case Constants.Theme.NIGHT_THEME:menuItem.setTitle(getResources().getString(R.string.action_switch_night));setTheme(R.style.DayTheme);ThemeUtil.getInstance(this).setTheme(Constants.Theme.DAY_THEME);changeTheme();break;}


三 . 使用TypeValue类,改变UI

    private void changeTheme() {TypedValue typedValue1 = new TypedValue();TypedValue typedValue2 = new TypedValue();TypedValue typedValue3 = new TypedValue();Resources.Theme theme = getTheme();theme.resolveAttribute(R.attr.toolbarColor, typedValue1, true);theme.resolveAttribute(R.attr.cardViewColor, typedValue2, true);theme.resolveAttribute(R.attr.cardViewTextUnselColor, typedValue3, true);mToolBar.setBackgroundColor(ContextCompat.getColor(this, typedValue1.resourceId));if (mCommonFragment != null) {    mCommonFragment.changeTheme(typedValue2,typedValue3);}    }
如此,就可以切换实现日夜模式了

1 0
原创粉丝点击