如何在Android Studio上强制应用黑暗主题?
根据,我只需要在我的活动清单中设置如何在Android Studio上强制应用黑暗主题?,android,android-studio,android-theme,android-dark-theme,Android,Android Studio,Android Theme,Android Dark Theme,根据,我只需要在我的活动清单中设置android:forceDarkAllowed=true,并从parent=“theme.MaterialComponents.DayNight”继承主题。我试过了,但没用 这是我的清单文件: <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@stri
android:forceDarkAllowed=true
,并从parent=“theme.MaterialComponents.DayNight”继承主题。我试过了,但没用
这是我的清单文件:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:forceDarkAllowed="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我尝试使用以下代码获取活动的主题名称:
resources.getResourceName(
packageManager.getPackageInfo(packageName, PackageManager.GET_META_DATA)
.applicationInfo.theme
)
它显示的是com.example.name:style/AppTheme
而不是AppTheme.Dark
。我如何使其在运行应用程序时,main活动
使用android:forceDarkAllowed
自动设置为使用AppTheme.Dark
(即暗模式)
如果你的应用程序使用深色主题(如theme.Material),则不会应用强制深色。类似地,如果应用程序的主题继承自DayNight主题,则由于自动主题切换,将不会应用Force Dark
Android 10(API级别29)及更高版本中提供了黑暗主题。确保设备的API级别为29+并且gradle
中的目标SDK为29李>
有两种方法可以应用黑暗主题:
DayNight-可定制主题-您可以控制黑暗/光明主题的外观
强制暗-您控制亮主题,如果用户选择暗模式,系统将在运行时将您的视图转换为暗主题
这不是安卓10的工作原理
首先,Android不会在任何时候神奇地将.Dark
附加到主题中,无论用户是否启用了黑暗模式。您有android:theme=“@style/AppTheme”
。因此,Android将一直使用AppTheme
,而您的AppTheme.Dark
将不会被使用
其次,DayNight
背后的想法是,你一直使用它作为基本主题,Android将根据用户请求在正常和黑暗模式之间切换。因此,如果您切换AppTheme
以扩展DayNight
,并摆脱AppTheme.Dark
,您将匹配所需的内容
android:forceDarkAllowed
适用于您无法使用DayNight
主题的情况,并且您希望android尝试自动将您的UI转换为黑色主题。如果您想保持AppTheme
扩展Light
而不是DayNight
,这可能会奏效(我个人还没有用MaterialComponents
主题尝试过)。但是,即使如此,也只有当用户启用了暗模式时(例如,点击通知色板)
例如,在中,我使用DayNight
作为我的主题:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
@颜色/原色
@颜色/原色暗
@颜色/颜色重音
我在和中对这些颜色有不同的定义。我不使用forceDarkAllowed
。而且,当用户切换夜间模式时,我的UI将从:
致:
我如何使其在运行应用程序时,MainActivity使用android:forceDarkAllowed自动设置为使用AppTheme.Dark(即黑暗模式)
你没有
如果您一直想要一个黑色主题,请使用常规主题(而不是浅色
,而不是日间
)。谢谢!我喜欢你非常透彻的解释。我知道我可以通过编程和用户请求更改为暗主题。然而,我对android:forceDarkAllowed的部分感到非常困惑。我会试着重读一遍,看看是否遗漏了什么。谢谢你,真的。这太完美了。@Richard:android:forceDarkAllowed
主要用于那些想要尝试在黑暗模式下破解支持而不修改主题和用户界面的现有应用程序。它工作得出奇地好,但仍然会出错。你需要彻底测试你的应用程序,以确认自动转换不会使某些东西难看或无法使用。啊,我明白了。我测试了android:forceDarkAllowed的样式主题.AppCompat
和主题.MaterialComponents
,它按照您所说的那样工作。它神奇地将颜色转换为黑色主题模式。然后我在Theme.AppCompat.DayNight/Light
和Theme.MaterialComponents.Light/DayNight
上再次尝试了它,但没有成功。我首先阅读了这一行,安卓在任何时候都不会神奇地将.Dark附加到你的主题中
,并立即得出结论,这个答案来自Commonware。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>