简介:

有关于Android 实现应用内动态切换主题的常用方式有两种

  • 通过Theme切换主题
  • 通过AssetManager切换主题

本文主要介绍通过Theme切换主题。

通过AssetManager切换主题

Android通过AssetManager来加载皮肤包,用皮肤包里的资源替换现有资源达成换肤效果。对此暂时没有深入研究,留作以后填写,不再赘述。

通过Theme切换主题

Android 通过在activity中使用 setTheme()函数来设置背景样式,通过加载styles.xml里的样式来设置Android 应用的主题。(注意:需要在 setContentView(R.layout.activity_main);之前调用setTheme)

在开始制作主题之前我们先看下这张图
通过这张图我们可以了解到不同的字段代表的是哪一块的颜色,例如:

  • colorPrimary 代表的是 App Bar 的颜色。
  • colorPrimaryDark 代表的是状态栏的背景色。

我们也可以自己定制布局控件的颜色:

1. 在values文件夹下创建attr.xml ,在attr.xml写入属性名

                    

2. 在colors.xml 填入需要用到的颜色。

    #008577    #D81B60    #00574B    #006c93    #b4e1f1    #003CFF    #000000    #FFFFFF    #fd0000    #f96363    #04fd00    #D9B300    #cecece    #ff3542

3. 在布局中引用样式,注意红框圈起来的部分

4. 在styles.xml文件下自定义主题样式
在这里写个例子示范。

    

parent 是指继承的主题风格,
常见的主题风格有:以下这些:
android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式
android:theme="@android:style/Theme.NoTitleBar" 不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不显示应用程序标题栏,并全屏
android:theme=“Theme.Light” 背景为白色
android:theme=“Theme.Light.NoTitleBar” 白色背景并无标题栏
android:theme=“Theme.Light.NoTitleBar.Fullscreen” 白色背景,无标题栏,全屏
android:theme=“Theme.Black” 背景黑色
android:theme=“Theme.Black.NoTitleBar” 黑色背景并无标题栏
android:theme=“Theme.Black.NoTitleBar.Fullscreen” 黑色背景,无标题栏,全屏
android:theme=“Theme.Wallpaper” 用系统桌面为应用程序背景
android:theme=“Theme.Wallpaper.NoTitleBar” 用系统桌面为应用程序背景,且无标题栏
android:theme=“Theme.Wallpaper.NoTitleBar.Fullscreen” 用系统桌面为应用程序背景,无标题栏,全屏
android:theme=“Translucent” 半透明
android:theme=“Theme.Translucent.NoTitleBar” 半透明、无标题栏
android:theme=“Theme.Translucent.NoTitleBar.Fullscreen” 半透明、无标题栏、全屏
android:theme=“Theme.Panel”

5. 实现读取配置文件设置主题

    private  void setBaseTheme() {        SharedPreferences sharedPreferences = getSharedPreferences(                "com.example.test_preferences", MODE_PRIVATE);        String themeType = sharedPreferences.getString("theme_type", "蓝色主题");        int themeId;        switch (themeType) {            case "蓝色主题":                themeId = R.style.blueTheme;                break;            case "粉色主题":                themeId = R.style.pinkTheme;                break;            case "彩色主题":                themeId = R.style.AppTheme;                break;            default:                themeId = R.style.blueTheme;        }        setTheme(themeId);    }

使用SharedPreferences 来读取文件。根据读取的参数来设置主题
再次提醒,需要写在setContentView(R.layout.activity_main);之前

下面是一些实现效果。



https://blog.csdn.net/qq_36674643/article/details/90546926
张联兴

更多相关文章

  1. Android(安卓)切换主题 (二)
  2. Android(安卓)5.0使用android:onClick属性出现崩溃的原因及解决
  3. Android(安卓)按钮点击切换背景,同时修改文字颜色
  4. Android那些疑惑(1)-Application中setTheme为什么不生效
  5. Android(安卓)颜色和颜色透明度列表
  6. Android开发指南-框架主题-内容提供器
  7. Android架构设计和软硬整合完整训练:HAL&Framework&Native Servic
  8. Android的selector背景选择器
  9. Android(安卓)版本兼容适配

随机推荐

  1. Android(安卓)可以自定义速度的跑马灯效
  2. Android的简介
  3. Android(安卓)2.2 demos -- Window Featu
  4. Android和Linux kernel发展史
  5. Android(安卓)Camera
  6. Android中线程同步之Mutex与Condtion的用
  7. Android(安卓)读取一个已经安装的包的权
  8. Android使用AIDL跨进程数据共享
  9. 为android电源键添加重启项
  10. android view的xml属性