Ric*_*ard 4 android android-theme android-studio android-dark-theme
根据文档,我只需要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>
Run Code Online (Sandbox Code Playgroud)
这是我的styles.xml风格:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
...
</style>
<style name="AppTheme.Dark" parent="Theme.MaterialComponents.DayNight">
...
</style>
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码获取活动的主题名称:
resources.getResourceName(
packageManager.getPackageInfo(packageName, PackageManager.GET_META_DATA)
.applicationInfo.theme
)
Run Code Online (Sandbox Code Playgroud)
它显示我com.example.name:style/AppTheme而不是AppTheme.Dark。我怎样才能让它在我运行应用程序时MainActivity自动设置为使用AppTheme.Dark(即暗模式)使用android:forceDarkAllowed?
gradle29。这不是暗模式在 Android 10 上的工作方式。
首先,.Dark无论用户是否启用暗模式,Android 都不会在任何时候神奇地附加到您的主题。你有android:theme="@style/AppTheme"。所以,Android 会一直使用AppTheme,而你的AppTheme.Dark不会被使用。
其次,背后的想法DayNight是你一直使用它作为你的基本主题,Android 将根据用户请求在正常和黑暗模式之间切换。因此,如果您切换AppTheme到 extendDayNight并摆脱了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>
Run Code Online (Sandbox Code Playgroud)
我对res/values/和 中的这些颜色有不同的定义res/values-night/。我不使用forceDarkAllowed. 而且,当用户切换夜间模式时,我的用户界面从:

到:

我怎样才能让它在我运行应用程序时,MainActivity 使用 android:forceDarkAllowed 自动设置自己使用 AppTheme.Dark(即暗模式)?
你没有。
如果您一直想要深色主题,请使用常规主题(不是Light,不是DayNight)。
无论当前系统设置如何,都有一些设置允许动态设置白天或夜晚。
每个选项都直接映射到 AppCompat.DayNight 模式之一:
Run Code Online (Sandbox Code Playgroud)Light - MODE_NIGHT_NO Dark - MODE_NIGHT_YES System default - MODE_NIGHT_FOLLOW_SYSTEM要切换主题,请调用 AppCompatDelegate.setDefaultNightMode()。
https://developer.android.com/guide/topics/ui/look-and-feel/darktheme#change-themes
这适用于设置 DayNight 主题。如果您尝试利用 Android 10 中的 Force Dark,它适用于子.Light主题。它不会应用于任何DayNight或本质上黑暗的主题。
应用程序必须通过在活动主题中设置 android:forceDarkAllowed="true" 来选择强制黑暗。此属性在所有系统和 AndroidX 提供的浅色主题上设置,例如 Theme.Material.Light。
https://developer.android.com/guide/topics/ui/look-and-feel/darktheme#force-dark
下面,文档还指定如何排除资源或代码中的某些项目。
可以使用 android:forceDarkAllowed 布局属性或 setForceDarkAllowed() 在特定视图上控制强制黑暗。
除此之外,还有一些方法可以检测当前系统的亮/暗设置并使用上面的选项对其进行响应,但这是另一篇文章的内容。
对于黑暗主题来说,这不是一个很好的解决方案,对于与已接受的答案的任何重叠,我深表歉意,但我不同意声称某些事情是不可能的,因为它不是首选的。
| 归档时间: |
|
| 查看次数: |
10366 次 |
| 最近记录: |