必威体育Betway必威体育官网
当前位置:首页 > IT技术

安卓Q暗黑模式适配

时间:2019-10-23 14:13:30来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

安卓Q

安卓Q版本新增了暗黑模式,用户只需在系统中开启暗黑模式(MIUI中叫做深色模式),即可开启全局暗黑模式,这个也需要第三方应用来进行适配

暗黑模式:本质上就是两套主题的切换,从明亮的主题切换暗色主题的一个过程,网上有很多成熟的第三方主题切换框架可以使用,不过我们这里讲的是利用安卓系统自带的API进行切换

先上两张效果图吧:

明亮模式
明亮模式
暗黑模式
暗黑模式

下面是适配步骤:

1、颜色定义:

首先在res/values/attr.xml 文件下定义控件的属性值,这里以颜色为例:

<attr name="tool_main_color" format="color" />
<attr name="tool_main_text_color" format="color"/>
<attr name="tool_second_text_color" format="color"/>
<attr name="tool_theme_text_color" format="color"/>
<attr name="tool_pider_color" format="color"/>
<attr name="tool_main_bg_color" format="color"/>
<attr name="tool_edit_bg_color" format="color"/>
<attr name="tool_btn_pressed_color" format="color"/>

2、主题定义:

在res/values/style.xml 文件中定义明亮模式的主题和暗色模式的主题:

明亮模式:

<style name="tool_lite_class" parent="Theme.APPCompat.DayNight.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNotitle">true</item>
    <item name="tool_main_color">@color/color_green</item>
    <item name="tool_main_text_color">@color/color_black</item>
    <item name="tool_second_text_color">@color/color_black_30</item>
    <item name="tool_theme_text_color">@color/color_green</item>
    <item name="tool_pider_color">@color/color_green</item>
    <item name="tool_edit_bg_color">@color/color_white</item>
    <item name="tool_main_bg_color">@color/color_white</item>
    <item name="tool_btn_pressed_color">@color/color_white_d9</item>
    <item name="colorPrimary">@color/color_green</item>
    <item name="colorPrimaryDark">@color/color_green</item>
    <item name="colorAccent">@color/color_green</item>
    <item name="Android:listdivider">@color/color_green</item>
</style>

暗色模式:

<style name="tool_lite_dark" parent="Theme.AppCompat.DayNight.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="tool_main_color">@color/color_black</item>
    <item name="tool_main_text_color">@color/color_white</item>
    <item name="tool_second_text_color">@color/color_white_60</item>
    <item name="tool_theme_text_color">@color/color_gray</item>
    <item name="tool_edit_bg_color">@color/color_black_39</item>
    <item name="tool_pider_color">@color/color_black</item>
    <item name="tool_main_bg_color">@color/color_black_30</item>
    <item name="tool_btn_pressed_color">@color/color_gray</item>
    <item name="colorPrimary">@color/color_gray</item>
    <item name="colorPrimaryDark">@color/color_gray</item>
    <item name="colorAccent">@color/color_gray</item>
    <item name="android:listDivider">@color/color_gray</item>
</style>

注意:主题一定要继承自 Theme.AppCompat.DayNight.DarkActionBar 或者 Theme.AppCompat.DayNight ,不同模式下的属性要保持一致,属性值根据不同主题单独设置即可

3、资源引用:

在布局中利用 ?attr/tool_main_color 来引用你所定义的颜色值

<TextView
    android:id="@+id/view_status_bar"
    android:layout_width="match_parent"
    android:layout_height="20dp"
    android:background="?attr/tool_main_color" />

4、AndroidManifest修改:

在activity的的清单文件中添加以下属性android:configChanges="uiMode"

举例:

<activity
    android:name=".module.decibel.DecibelActivity"
    android:configChanges="uiMode" />

5、在activity中设置主题:

当activity初始化时,在setcontentView(R.layout.activity_base)

之前先一步设置通过setTheme(R.style.tool_lite_dark)来设置主题样式,

注意:setTheme()一定要在setContentView()之前调用,否则主题设置无法生效

6、检查当前系统是否已开启暗黑模式:

fun getDarkModeStatus(context: Context): Boolean {
    val mode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
    return mode == Configuration.UI_MODE_NIGHT_YES
}

7、监听系统暗黑主题开启与关闭

在activity中重写onConfigurationChanged()方法,代码如下:

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    when (newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
    Configuration.UI_MODE_NIGHT_YES -> {
        // 暗黑模式已开启
    }
    Configuration.UI_MODE_NIGHT_NO -> {
        // 暗黑模式已关闭
    }
	}
}

我的办法是通过recreate()重建界面来达到切换主题的,当然你也可以通过其他方式实现

项目地址:https://github.com/konstant2016/konstantTool/,欢迎 start

文章最后发布于: 2019-05-20 10:46:44

相关阅读

风光摄影适配镜头 索尼G大师镜头SEL2470GM

以展现自然风光为题材的拍摄,就是大家所说的风光摄影。风光摄影是人们最为喜爱的拍摄题材,名山、大川,森林、海洋,古寺、庙宇强烈的吸

科技跨界时尚成新潮流,天猫精灵QUEEN智能美妆镜抢占C位

&ldquo;天猫精灵,我要化妆。&rdquo;&ldquo;天猫精灵,今天紫外线强度如何?&rdquo;&ldquo;天猫精灵,提醒我9点敷面膜。&rdquo;这些

以GQ实验室为例:如何做公众号选题?

如果你是刚加入GO实验室的一名内容运营人员,主要工作是负责公众号的原创内容,每周你们都需要开选题会,面对这种情况,你打算怎么做呢?背

最后一次更新还是两年前 QQ影音为什么还没被腾讯放弃

近日有网友反映QQ影音官网打开无法访问,提示&ldquo;400 Bad Request&rdquo;,不过现在已经可以正常访问了!如果不是这次404无法访问

MQTT协议(四)>>> 【PUBLISH】发布消息

PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。需要注意的是:上传更新数据流是PUBLISH 中一个特殊的

分享到:

栏目导航

推荐阅读

热门阅读