bilibili主题切换
来源:互联网 发布:java哪些源码值得看 编辑:程序博客网 时间:2024/06/05 04:18
第一步:
添加libs
compile 'com.android.support:recyclerview-v7:25.3.1' //主题框架 compile 'com.bilibili:magicasakura:0.1.5@aar'需要添加recycleview否则会报错。
res文件中添加color.xml
<?xml version="1.0" encoding="utf-8"?><resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="theme_color_primary">#fb7299</color> <color name="theme_color_primary_dark">#b85671</color> <color name="theme_color_primary_trans">#99f0486c</color> <color name="theme_color_secondary">#fb7299</color> <color name="text_primary_color">#2d2d2d</color> <color name="window_background">#eaeaea</color> <color name="black_light">#333333</color> <color name="white">#ffffff</color> <color name="white_trans">#99ffffff</color> <color name="gray_dark">#999999</color> <color name="gray_trans">#44999999</color> <color name="gray_light">#dcdcdc</color> <!-- theme color --> <color name="pink">#fb7299</color> <color name="pink_dark">#b85671</color> <color name="pink_trans">#99f0486c</color> <color name="blue">#2196F3</color> <color name="blue_dark">#1565C0</color> <color name="blue_trans">#B41A78C3</color> <color name="purple">#673AB7</color> <color name="purple_dark">#311B92</color> <color name="purple_trans">#99673AB7</color> <color name="green">#4CAF50</color> <color name="green_dark">#2E7D32</color> <color name="green_trans">#994CAF50</color> <color name="green_light">#8BC34A</color> <color name="green_light_dark">#558B2F</color> <color name="green_light_trans">#998BC34A</color> <color name="yellow">#FDD835</color> <color name="yellow_dark">#FBC02D</color> <color name="yellow_trans">#99FDD835</color> <color name="orange">#FF9800</color> <color name="orange_dark">#EF6C00</color> <color name="orange_trans">#99FF9800</color> <color name="red">#F44336</color> <color name="red_dark">#C62828</color> <color name="red_trans">#99F44336</color></resources>其中
theme_color_primary是最为重要的在bilibili封装的组件中设置需要设置的主题为这个颜色,然后调用代码就可以更改主题。
style中设置:
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowNoTitle">true</item>
可以选择不这样设置用组件中封装的toolbar
第二步设置代码:
appliction中设置:
@Override public int replaceColorById(Context context, @ColorRes int colorId) { if (ThemeHelper.isDefaultTheme(context)) { return context.getResources().getColor(colorId); } String theme = getTheme(context); if (theme != null) { colorId = getThemeColorId(context, colorId, theme); } return context.getResources().getColor(colorId); } @Override public int replaceColor(Context context, @ColorInt int originColor) { if (ThemeHelper.isDefaultTheme(context)) { return originColor; } String theme = getTheme(context); int colorId = -1; if (theme != null) { colorId = getThemeColor(context, originColor, theme); } return colorId != -1 ? getResources().getColor(colorId) : originColor; } private String getTheme(Context context) { if (ThemeHelper.getTheme(context) == ThemeHelper.CARD_STORM) { return "blue"; } else if (ThemeHelper.getTheme(context) == ThemeHelper.CARD_HOPE) { return "purple"; } else if (ThemeHelper.getTheme(context) == ThemeHelper.CARD_WOOD) { return "green"; } else if (ThemeHelper.getTheme(context) == ThemeHelper.CARD_LIGHT) { return "green_light"; } else if (ThemeHelper.getTheme(context) == ThemeHelper.CARD_THUNDER) { return "yellow"; } else if (ThemeHelper.getTheme(context) == ThemeHelper.CARD_SAND) { return "orange"; } else if (ThemeHelper.getTheme(context) == ThemeHelper.CARD_FIREY) { return "red"; } return null; } private @ColorRes int getThemeColorId(Context context, int colorId, String theme) { switch (colorId) { case R.color.theme_color_primary: return context.getResources().getIdentifier(theme, "color", getPackageName()); case R.color.theme_color_primary_dark: return context.getResources().getIdentifier(theme + "_dark", "color", getPackageName()); case R.color.theme_color_primary_trans: return context.getResources().getIdentifier(theme + "_trans", "color", getPackageName()); } return colorId; } private @ColorRes int getThemeColor(Context context, int color, String theme) { switch (color) { case 0xfffb7299: return context.getResources().getIdentifier(theme, "color", getPackageName()); case 0xffb85671: return context.getResources().getIdentifier(theme + "_dark", "color", getPackageName()); case 0x99f0486c: return context.getResources().getIdentifier(theme + "_trans", "color", getPackageName()); } return -1; }application实现这个方法
implements ThemeUtils.switchColor
主题代码设置放在
SharePreference
private static final String CURRENT_THEME = "theme_current"; public static final int CARD_SAKURA = 0x1; public static final int CARD_HOPE = 0x2; public static final int CARD_STORM = 0x3; public static final int CARD_WOOD = 0x4; public static final int CARD_LIGHT = 0x5; public static final int CARD_THUNDER = 0x6; public static final int CARD_SAND = 0x7; public static final int CARD_FIREY = 0x8; public static SharedPreferences getSharePreference(Context context) { return context.getSharedPreferences("multiple_theme", Context.MODE_PRIVATE); } public static void setTheme(Context context, int themeId) { getSharePreference(context).edit() .putInt(CURRENT_THEME, themeId) .commit(); } public static int getTheme(Context context) { return getSharePreference(context).getInt(CURRENT_THEME, CARD_SAKURA); } public static boolean isDefaultTheme(Context context) { return getTheme(context) == CARD_SAKURA; } public static String getName(int currentTheme) { switch (currentTheme) { case CARD_SAKURA: return "THE SAKURA"; case CARD_STORM: return "THE STORM"; case CARD_WOOD: return "THE WOOD"; case CARD_LIGHT: return "THE LIGHT"; case CARD_HOPE: return "THE HOPE"; case CARD_THUNDER: return "THE THUNDER"; case CARD_SAND: return "THE SAND"; case CARD_FIREY: return "THE FIREY"; } return "THE RETURN"; }
调用这个方法更新主题:
ThemeUtils.refreshUI(MainActivity.this, new ThemeUtils.ExtraRefreshable() { @Override public void refreshGlobal(Activity activity) { //for global setting, just do once if (Build.VERSION.SDK_INT >= 21) { final MainActivity context = MainActivity.this; ActivityManager.TaskDescription taskDescription = new ActivityManager.TaskDescription(null, null, ThemeUtils.getThemeAttrColor(context, android.R.attr.colorPrimary)); setTaskDescription(taskDescription); getWindow().setStatusBarColor(ThemeUtils.getColorById(context, R.color.theme_color_primary)); } } @Override public void refreshSpecificView(View view) { } } );https://github.com/Bilibili/MagicaSakura
官网上的代码,下下来后可以仿写。
重要的是设置颜色时使用theme_color_primary
0 1
- bilibili主题切换
- 切换主题
- 主题切换
- Theme切换(主题切换)
- Ext 主题切换
- Android动态切换主题
- asp.net主题切换
- Android动态切换主题
- Ext动态主题切换
- IOS主题切换ThemeManager
- ExtJs切换主题
- Android 应用主题切换
- JavaScript切换主题
- Android主题切换方案
- Android动态切换主题
- Android动态切换主题
- app 主题切换
- easyui切换主题
- 获取本机系统时间
- 我的算法14
- (一)Class类与ClassLoader简介
- 使用Git实现版本控制(一)
- grunt基本介绍
- bilibili主题切换
- 线性表续——双向、循环链表
- Spring面试,IoC和AOP的理解
- 时间序列模型
- 错误:java.lang.IllegalArgumentException: Service not registered
- code[vs] 1154能量项链(成环的区间dp)
- HDU5546 Ancient Go(深搜DFS)(2015CCPC)
- L2-021. 点赞狂魔
- bzoj4843