Как сделать прозрачную строку состояния на Samsung в Kotlin MultiplatformAndroid

Форум для тех, кто программирует под Android
Anonymous
Как сделать прозрачную строку состояния на Samsung в Kotlin Multiplatform

Сообщение Anonymous »

Я разработал приложение с прозрачными системными полосами, и оно корректно отображается прозрачным на моем Pixel 7 и всех виртуальных устройствах во многих версиях Android (7.0, 9.0, 14.0, 15.0, 16.0), но на Samsung Galaxy S23 Ultra (Android 14) моего друга системная панель черная:
Снимок экрана Samsung с Android 14 (черная строка состояния)
Скриншот виртуального Android 14 (прозрачная строка состояния)
В других приложениях на его телефоне строка состояния прозрачна.
У кого-нибудь была такая же проблема или есть ли у кого-нибудь опыт оказания помощи? Нужны ли устройствам Samsung особый подход к строке состояния?
Это соответствующие фрагменты кода из моего приложения:
SystemAppearance:

Код: Выделить всё

@Composable
actual fun SystemAppearance(isDark: Boolean) {
val view = LocalView.current
val colorScheme = MaterialTheme.colorScheme

if (!view.isInEditMode) {
SideEffect {
val window = (view.context as Activity).window

WindowCompat.setDecorFitsSystemWindows(window, false)

val controller = WindowCompat.getInsetsController(window, window.decorView)

if (Build.VERSION.SDK_INT >= 28) { // >= Android 9
window.attributes.layoutInDisplayCutoutMode = android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}

@Suppress("DEPRECATION")
if (Build.VERSION.SDK_INT >= 29) { // >= Android 10
window.statusBarColor = Color.Transparent.toArgb()
window.navigationBarColor = Color.Transparent.toArgb()
}
else if (Build.VERSION.SDK_INT = Android 10
window.isStatusBarContrastEnforced = false
window.isNavigationBarContrastEnforced = false
}
}
}
}
В MainActivity.kt:

Код: Выделить всё

        enableEdgeToEdge(
statusBarStyle = SystemBarStyle.dark(
android.graphics.Color.TRANSPARENT
),
navigationBarStyle = SystemBarStyle.light(
android.graphics.Color.TRANSPARENT,
android.graphics.Color.TRANSPARENT
)
)
В Theme.kt:

Код: Выделить всё

@Composable
fun SongBookTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
fontSize: Float = 16f,
content: @Composable () -> Unit
) {
val colorScheme = if (darkTheme) DarkColorScheme else LightColorScheme

MaterialTheme(
colorScheme = colorScheme,
typography = getTypography(fontSize.sp)
) {
SystemAppearance(darkTheme)
content()
}
}
SongBookTheme вызывается в MainActivity после метода EnableEdgeToEdge() внутри блока setContent.

Вернуться в «Android»