在 Android 12 上,
如果我们开启一个活动
进入手机主屏幕更换壁纸
切换回我们的 Activity,该 Activity 重新启动。
看起来它与 Material You 主题有关。
我想在我的应用程序进入前台时禁用活动的重新启动。有办法吗?
我在网上找不到任何相关信息,没有文档,什么也没有。也许你们中的一个人知道如何做或者给了我一些建议。先感谢您。
我最近注意到,当用户尝试在 Android 12 上设置新引入的“主题图标”功能时,我的动态壁纸应用程序崩溃了。这项新功能会根据用户当前的静态壁纸计算调色板,并使用该调色板为某些壁纸着色。其他应用程序图标(新“Material You”设计的一项功能)。但由于某种原因,当它在动态壁纸上运行时,它会导致应用程序崩溃并显示以下日志:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
at android.os.Parcel.createExceptionOrNull(Parcel.java:2443)
at android.os.Parcel.createException(Parcel.java:2421)
at android.os.Parcel.readException(Parcel.java:2404)
at android.os.Parcel.readException(Parcel.java:2346)
at android.service.wallpaper.IWallpaperConnection$Stub$Proxy.onWallpaperColorsChanged(IWallpaperConnection.java:298)
at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:2586)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:44)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8582)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:563)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)
Caused by android.os.RemoteException: Remote stack trace:
at com.samsung.server.wallpaper.LegibilityColor.convertColors(LegibilityColor.java:418)
at com.android.server.wallpaper.WallpaperManagerService$WallpaperConnection.onWallpaperColorsChanged(WallpaperManagerService.java:2169)
at android.service.wallpaper.IWallpaperConnection$Stub.onTransact(IWallpaperConnection.java:158)
at android.os.Binder.execTransactInternal(Binder.java:1215)
at android.os.Binder.execTransact(Binder.java:1179)
Run Code Online (Sandbox Code Playgroud)
目前,我只能在三星 Galaxy S21 / S21 Ultra 手机上观察到此崩溃,但随着用户将系统更新到 Android 12,它将出现在更多手机上。
目前,我无法重现此崩溃,因为我没有 Galaxy S21,并且 Android Studio …
android-layout material-design bottomnavigationview material-components-android material-you
我有两个包含首选项部分的应用程序,并且我正在使用首选项库,这是撰写本文时可用的最新版本:
implementation "androidx.preference:preference:1.2.0-rc01"
Run Code Online (Sandbox Code Playgroud)
现在,我将我的应用程序主题化为使用并遵循新的 Material3 (或Material You)主题,但我面临的一个问题是,虽然普通对话框的主题正确,但首选项部分中的对话框仅部分主题(角半径)。他们显然不使用新样式,这种不一致让我丧命:D
目前,我没有找到一种没有奇怪的解决方法来主题化它们的方法,所以我将不胜感激的建议。这是我目前的对话框样式
<!-- Dialog theme -->
<style name="ThemeOverlay.App.MaterialAlertDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="colorOnSurface">?colorAccent</item>
<item name="alertDialogStyle">@style/MaterialAlertDialog.App</item>
<item name="dialogCornerRadius">@dimen/bottom_sheet_corners</item>
</style>
<!-- Note: shape appearance doesn't work with the preference dialogs (they're not material) -->
<style name="MaterialAlertDialog.App" parent="MaterialAlertDialog.Material3">
<item name="shapeAppearance">@style/ShapeAppearance.App.MediumComponent</item>
<item name="shapeAppearanceOverlay">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)
也许这只是等待的问题?
android android-preferences material-design material-dialog material-you
当我试图强制NavigationBar使用MaterialTheme.colorScheme.surface颜色时(请参阅材料 3 指南),应用程序的背景颜色和颜色NavigationBar不同。示例: 的颜色NavigationBar为#f1edf7,但背景颜色为#fffbfe。背景应用程序颜色也是MaterialTheme.colorScheme.surface如此。
android navigationbar android-jetpack-compose material-you android-jetpack-compose-material3
目前,我正在将我的一个应用程序迁移到 Material Design 3,该应用程序完全使用 Jetpack Compose 用 Kotlin 编写。
在使用 Material Design 2 时,我可以使用下面的代码更改文本的重点。
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
Text(
text = "Hello, world",
style = MaterialTheme.typography.h6,
fontWeight = FontWeight.SemiBold,
)
}
Run Code Online (Sandbox Code Playgroud)
但是,相同的代码不适用于 Material Design 3,并且文本具有默认强调。另外,我在Material Design 3中找不到相关功能。我想知道是否有任何官方方法可以达到相同的效果。
android android-jetpack-compose android-jetpack-compose-text material-you material-design-3
在使用基于视图的系统时,我们可以使用以下代码来协调颜色。
MaterialColors.harmonizeWithPrimary(context, colorToHarmonize)
Run Code Online (Sandbox Code Playgroud)
在完全迁移到 Jetpack Compose 并且所有颜色值都存储在文件中的项目中Color.kt,如何在运行时对颜色应用协调?
android android-jetpack-compose material-you android-jetpack-compose-material3 material3
android material-design android-toolbar android-appbarlayout material-you
因此,我正在更新我的应用程序以完全支持 Monet 和 Material You 指南,并且官方网站提到了开关的新设计。我用了一下,结果是这样的:
我有一个使用 Androidx 首选项库的首选项屏幕,在撰写本文时提供了最新版本,我发现对开关进行主题化的唯一方法(手动主题除外,这没有意义)是在应用程序的主题中使用这一行:
<item name="switchStyle">@style/Widget.Material3.CompoundButton.MaterialSwitch</item>
Run Code Online (Sandbox Code Playgroud)
使用 SwitchPreferenceCompat (它在常规 SwitchPreference 中不起作用)这就是我得到的:
无论宽度如何(不同,但可以更改),禁用状态都完全不同,并且与应用程序的其余部分不匹配。为什么?最重要的是,为什么他们建议使用以下库:
?
我不想太挑剔,但这超出了我的理解范围。
编辑:目前,我在各处使用 switchCompat,以使应用程序统一。查看系统应用程序,我可以找到 4 种不同类型的开关:类似于第二个屏幕截图的自定义开关、旧的开关和本问题中的两种类型。这真是令人困惑。
android styles android-preferences switchpreference material-you
material-you ×10
android ×8
android-12 ×2
android-jetpack-compose-material3 ×2
android-jetpack-compose-text ×1
crash ×1
material-components-android ×1
material3 ×1
styles ×1
theming ×1