当前位置: 首页 > 编程笔记 >

AndroidQ(10)黑暗模式适配的实现

万俟英锐
2023-03-14
本文向大家介绍AndroidQ(10)黑暗模式适配的实现,包括了AndroidQ(10)黑暗模式适配的实现的使用技巧和注意事项,需要的朋友参考一下

前言:作为一个Android程序员,每年最期待就是Google的发布会啦!!这不,今年的AndroidQ如期而至。这里简单介绍一下Android的新特性:

  • AndroidQ全局暗黑模式
  • 隐私权限的更新
  • AndroidQ新版的手势导航(其实就是仿IOS)
  • 系统日程UI的优化(还有其他系统UI上的优化)
  • Google组件(jetpack)的推荐

每年的Google大会一结束就是程序员忙碌工作的开端,各种适配,各种新功能… 一堆事情下来,搞的焦头烂额。 但是今年的发布会之后,仔细一看Q的更新清单,其实需要我们去适配优化的并不多,主要就是隐私权限和黑暗模式需要我们紧急适配。而且黑暗模式和以往的多主题适配是一个道理,这样我们的跟进优化工作就更加简单了。废话不多说,这里我们就来介绍一下在原生系统下进行黑暗模式的适配。

AndroidQ黑暗模式适配:

适配原理介绍:黑暗模式和正常模式,无非就是两种主题间的切换(主要是各种背景色,字体颜色和Icon)。因此我们只需要定义两套不同的主题,根据是否是黑暗模式进行主题的切换即可。

详细步骤:

判断当前是否处于黑暗模式:用于启动时还在不同的主题

 //检查当前系统是否已开启暗黑模式
  public static boolean getDarkModeStatus(Context context) {
    int mode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
    return mode == Configuration.UI_MODE_NIGHT_YES;
  }

定义两套主题(正常模式和黑暗模式):即在style文件下自定义两个style,但是必须指定parent为‘Theme.AppCompat.DayNight.DarkActionBar',如下所示:

//正常模式下的主题
 <style name="main_theme_light" parent="Theme.AppCompat.DayNight.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="main_text_color">@color/main_text_color_light</item>
    <item name="main_bg_color">@color/main_bg_color_light</item>
  </style>

//黑暗模式下的主题
 <style name="main_theme_dark" parent="Theme.AppCompat.DayNight.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="main_text_color">@color/main_text_color_dark</item>
    <item name="main_bg_color">@color/main_bg_color_dark</item>
  </style>

找出适配黑暗模式需要的属性(主要是颜色属性:背景色、字体颜色和Icon颜色等并给属性赋值),类似如下定义:
供在上一步的style中引用,不同模式下提供不同的值

 <!--  主要字体颜色-->
  <attr name="main_text_color" format="color" />
 <!--  主要背景颜色-->  
  <attr name="main_bg_color" format="color" />


 //不同模式下的颜色属性值
 <color name="main_text_color_light">#000000</color>
  <color name="main_text_color_dark">#ffffff</color>
  <color name="main_bg_color_light">#ffffff</color>
  <color name="main_bg_color_dark">#000000</color>

在activity和xml中引用我们自定义的属性:

//在xml文件中使用我们自定义属性
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="?attr/main_bg_color">

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:textColor="?attr/main_text_color"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

//在BaseActivity中切换不同的主题,才能使我们自定义的属性生效,必须在setContentView()方法前设置:
 @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    if (getDarkModeStatus(this)) {
      setTheme(R.style.main_theme_dark);
    }else {
      setTheme(R.style.main_theme_light);
    }
    setContentView(R.layout.activity_main)
   }

//为达到更好的适配效果,可在xml文件的activity节点下加入如下属性:
android:configChanges="uiMode"

ps:Icon的适配可以借助tint属性切换不同模式的颜色。

总结:到此为止,我们在两个模式下的切换就算完成了,你可以尝试开启系统的黑暗模式,可见我们的几面也会换成黑暗模式下的主题。如果有更多不同主题,那我们的工作就简单了,只需要在style文件下增加主题,并且加入主题下的颜色值就可以了。

到此这篇关于AndroidQ(10)黑暗模式适配的实现的文章就介绍到这了,更多相关AndroidQ(10)黑暗模式内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 在 macOS 10.14 Mojave中, Apple 为所有 macOS 电脑引入了一个全新的 系统级黑暗模式。 If your app does have a dark mode, you can make your Electron app follow the system-wide dark mode setting. In macOS 10.15 Catalina, Apple in

  • 本文向大家介绍浅谈iOS开发如何适配暗黑模式(Dark Mode),包括了浅谈iOS开发如何适配暗黑模式(Dark Mode)的使用技巧和注意事项,需要的朋友参考一下 暗黑模式 原理 将同一个资源,创建出两种模式的样式。系统根据当前选择的样式,自动获取该样式的资源 每次系统更新样式时,应用会调用当前所有存在的元素调用对应的一些重新方法,进行重绘视图,可以在对应的方法做相应的改动 资源文件适配 创建

  • 从Android10开始,你可以在黑暗模式和默认灯光模式之间切换。我还没有做任何更深入的研究,因为这是一个新的话题。暗模式的颜色切换是由操作系统自动的,还是有任何方法告诉我的应用程序切换不同的应用程序主题,如果暗模式是打开的?此外,黑暗模式也可能出现在一些Android 9设备上。 因为我使用自定义参数创建了自定义深色主题,并在资源中为每种颜色设置了深色(在中使用自定义属性,并在的主题中为它们应用

  • 我有一个应用程序,我在其中使用AppCompatDelegate和values night。xml以编程方式切换到应用程序中的暗主题。我有一套活动。带有SettingsFragment的java,其中我设置了一个OnSharedPreferenceChangeListener来监听相应的SharedPreferences值。在设置页面中,我加入了暗模式设置。但是,在切换设置时,暗模式不会自动打开;

  • 当我在开发iOS应用程序时,我需要在模拟器中测试它与黑暗模式选项,这样我就可以获得更清晰的应用程序用户界面。但当我去设置,我没有得到黑暗模式作为真实设备显示选项。

  • 本文向大家介绍PyQt5实现暗黑风格的计时器,包括了PyQt5实现暗黑风格的计时器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了PyQt5实现暗黑风格的计时器的具体代码,供大家参考,具体内容如下 主要是学习多线程知识,使用的是QTime(),但是似乎用QThread()更多一些 (QThread()与QTimer()的优势不再赘述) 但是记下来总没错 QSS渲染使用的是qdarks

  • 我刚买了一台新电脑,下载了visual studio代码。我正在尝试运行与我在另一台PC上的代码完全相同的绘图(仅),但现在似乎有一个深色背景而不是白色: 我发现这个和这个有相反的问题。为了澄清,我问如何将matplotlib背景图更改为白色(请注意,在我的另一台机器中,我不必硬编码任何matplotlb背景信息,因此我认为这是一个visual studio问题,但无法解决)

  • 主要内容:介绍,实现,MediaPlayer.java,AdvancedMediaPlayer.java,VlcPlayer.java,Mp4Player.java,MediaAdapter.java,AudioPlayer.java,AdapterPatternDemo.java适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的