我想在我的应用程序中实现 android 10 深色主题,我有以下情况:
SYSTEM_DEFAULT, NIGHT_MODE, LIGHT_MODE
问题是当我从应用程序内部将主题从夜晚或灯光更改为 system_default 时,它无法理解系统是处于亮模式还是暗模式。所以主题不会更新。
我已经尝试过谷歌的黑暗主题 https://developer.android.com/guide/topics/ui/look-and-feel/darktheme
并且实施配置仍然对我不利,因为如果用户在系统默认为天时将天更改为系统默认值,我不想重新创建我的活动。
反正我能处理这个吗?
when(id) {
NIGHT - > theme = Theme.NIGHT_MODE
DAY - > theme = Theme.LIGHT_MODE
SYSTEM_DEFAULT - > theme = Theme.SYSTEM_DEFAULT
}
context ? .clearCachedDrawables()
activity ? .recreate()
}Run Code Online (Sandbox Code Playgroud)
编辑:
when (themeStatus) {
Theme.LIGHT_MODE ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Theme.NIGHT_MODE ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
Theme.SYSTEM_DEFAULT ->
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
}Run Code Online (Sandbox Code Playgroud)
android kotlin-android-extensions android-10.0 android-dark-theme
当我在模拟器(Pixel android 10)中运行我的本机应用程序时,我注意到当手机设置为暗模式时,该应用程序将白色背景更改为黑色。这使得难以阅读黑色文本或其他任何内容。尽管操作系统处于深色或浅色模式,是否有办法强制应用程序以浅色主题运行
"react-native-appearance": "^0.3.2",
Run Code Online (Sandbox Code Playgroud) android themes android-layout react-native android-dark-theme
我有两种 PNG 变体,一种是绘制的文本为黑色,另一种为白色。默认情况下,在白色背景上,我使用黑色图像变体,但是当启用系统暗模式时,图像在背景中几乎不可见。
启用暗模式时,如何指示我的应用使用备用图像?
图像在活动的 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"
tools:context="com.me.some_app.someActivity">
<ImageView
android:id="@+id/Logo"
android:layout_width="176dp"
android:layout_height="219dp"
android:contentDescription="@string/LogoDescription"
app:layout_constraintBottom_toTopOf="@+id/divider"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/logo_black" />
Run Code Online (Sandbox Code Playgroud) 我的新应用不支持深色模式。当我在小米上安装它时(打开深色模式)MIUI 会在其上应用深色模式。MIUI 在“设置 -> 显示 -> 更多深色模式选项”中进行设置(“更多深色模式选项”截图)。尽管我的应用程序不支持此选项,但我的应用程序已打开此选项并强制使用深色模式。大多数其他应用程序没有启用此模式。有些应用程序是“白色”的,但对于它们来说,此模式未启用并且它们可以正常工作。
我找到了通过将以下行添加到 theme.xml 的解决方案:
<item name="android:forceDarkAllowed">false</item>
Run Code Online (Sandbox Code Playgroud)
问题是,这一行需要设置 minSdkVersion = 29。如何防止 MIUI 在“更多深色模式选项”中启用该选项并在我的应用程序中强制使用深色模式(就像在大多数其他“白色”应用程序中一样)并将 SDK 版本保持在 21 ?
基于Android 10的MIUI 12
TL,DR;
ContextCompat.getColor()values-night/colors.xml启用夜间模式时应使用夜间颜色(),但不使用。
这是问题所在:
嗨,大家好,
因此,我正在为我的Android应用程序实现深色主题,我称其为启用它:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
我在中设置了颜色,values/colors.xml并在中设置了深色版本values-night/colors.xml。颜色的变化取决于nightMode,但:
当我使用时ContextCompat.getColor(getApplicationContext(), R.id.myColor),它将使用常规颜色(values/colors.xml)而不是夜间颜色(values-night/colors.xml)。
在我中build.gradle,我设置了以下这些:
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0-beta01'
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我我做错了什么吗?
PS:我已经看过以下问题,它不能回答此问题/sf/ask/4044576301/
在网站material.io中写道:
创建品牌深色表面,覆盖主品牌颜色在低不透明度超过建议黑暗的主题表面颜色(#121212)。颜色 #1F1B24 是将深色主题表面颜色 #121212 和8% 原色结合的结果。
我的问题是:
我在我的 flutter 项目中使用具有不同分辨率的图像,如此处所述。现在我想为深色模式主题添加自定义图像。我在 pubspec.yaml 中的资产声明如下所示:
flutter:
uses-material-design: true
assets:
- assets/images/img_menu.png
- ...
Run Code Online (Sandbox Code Playgroud)
我的资产结构:
.../pubspec.yaml
.../assets/images/img_menu.png
.../assets/images/0.75x/img_menu.png
.../assets/images/1.5x/img_menu.png
.../assets/images/2.0x/img_menu.png
.../assets/images/3.0x/img_menu.png
.../assets/images/4.0x/img_menu.png
Run Code Online (Sandbox Code Playgroud)
我以这种方式在项目中加载图像:
Image.asset('assets/images/img_menu.png')
Run Code Online (Sandbox Code Playgroud)
我知道对于简单的单色图像我可以像这样改变它的颜色:
Image.asset('assets/images/img_menu.png',
color: Theme.of(context).brightness == Brightness.light
? Colors.black
: Colors.white,)
Run Code Online (Sandbox Code Playgroud)
但我的大多数图像都比较复杂,所以我必须为它们加载自定义资源。
正如此处所述,在添加暗模式资产后,我可以不做任何更改地保留 pubspec。我尝试过黑暗模式的不同资产结构,但没有一个有效。
1:
.../pubspec.yaml
.../assets/images/img_menu.png
.../assets/images/dark/img_menu.png
.../assets/images/0.75x/img_menu.png
.../assets/images/0.75x/dark/img_menu.png
.../assets/images/1.5x/img_menu.png
.../assets/images/1.5x/dark/img_menu.png
.../assets/images/2.0x/img_menu.png
.../assets/images/2.0x/dark/img_menu.png
.../assets/images/3.0x/img_menu.png
.../assets/images/3.0x/dark/img_menu.png
.../assets/images/4.0x/img_menu.png
.../assets/images/4.0x/dark/img_menu.png
Run Code Online (Sandbox Code Playgroud)
2:
.../pubspec.yaml
.../assets/images/img_menu.png
.../assets/images/0.75x/img_menu.png
.../assets/images/1.5x/img_menu.png
.../assets/images/2.0x/img_menu.png
.../assets/images/3.0x/img_menu.png
.../assets/images/4.0x/img_menu.png
.../assets/images/dark/img_menu.png
.../assets/images/dark/0.75x/img_menu.png
.../assets/images/dark/1.5x/img_menu.png
.../assets/images/dark/2.0x/img_menu.png
.../assets/images/dark/3.0x/img_menu.png
.../assets/images/dark/4.0x/img_menu.png
Run Code Online (Sandbox Code Playgroud)
3:
.../pubspec.yaml
.../assets/images/img_menu.png
.../assets/images/0.75x/img_menu.png
.../assets/images/1.5x/img_menu.png
.../assets/images/2.0x/img_menu.png
.../assets/images/3.0x/img_menu.png
.../assets/images/4.0x/img_menu.png
.../assets/dark/images/img_menu.png
.../assets/dark/images/0.75x/img_menu.png
.../assets/dark/images/1.5x/img_menu.png
.../assets/dark/images/2.0x/img_menu.png …Run Code Online (Sandbox Code Playgroud) 我需要知道用户是否在操作系统级别启用了深色主题,以便我可以在我的应用程序中自动启用深色主题。(不强制深色模式)
到目前为止,我从谷歌了解到,你必须使用Theme.Appcompat.Daynight或 Material Daynight 主题来使你的应用程序支持黑暗模式。并且您需要在values和values-night目录中使用不同的styles.xml。我不愿意让我的应用程序支持深色主题。但是当我将 Android 系统主题(从通知面板)更改为深色时,我的应用程序变黑。我使用Theme.Appcompat.Light作为基本主题,没有为我的应用程序支持黑暗模式做任何事情,但我的应用程序仍然变暗。我是第一次使用cardview,不知道这是否是原因,因为我对android编程很陌生。我们非常欢迎您的一点帮助。请在此处检查屏幕截图:
android android-theme android-cardview android-dark-theme android-darkmode
我想将色调设置为可绘制白色,并且当我将应用程序更改为深色主题时,我不知道要更改什么颜色,所以我像这样声明我的颜色。
values/colors.xml
<color name="white_force">#ffffff</color>
values-night/colors.xml
<color name="white_force">#ffffff</color>
ic_drawable.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="14dp"
android:height="18dp"
android:viewportWidth="14"
android:viewportHeight="18">
<path
android:pathData="M12,......,3V15Z"
android:fillColor="#ffffff" />
</vector>
layout
<?xml version="1.0" encoding="utf-8"?>
<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">
<ImageView
android:id="@+id/bookmarkImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:padding="@dimen/ds2_space_2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_bookmark_white_14" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
但是当我将 Tint 设置为可绘制对象时,当我将应用程序更改为深色模式时,它会将颜色 t0 设置为黑色而不是白色。
android ×8
android-10.0 ×2
flutter ×2
assets ×1
darkmode ×1
image ×1
ios-darkmode ×1
miui ×1
react-native ×1
themes ×1
uicolor ×1