Как сделать прозрачную панель состояния Android при наличии верхней панели приложений, простирающейся под ним при прокруAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать прозрачную панель состояния Android при наличии верхней панели приложений, простирающейся под ним при прокру

Сообщение Anonymous »

Я хочу сделать что -то подобное в приложении Google Photos:
Сначала строка состояния и верхняя панель приложений занимают некоторое пространство:

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

class MainActivity : ComponentActivity() {
@OptIn(ExperimentalMaterial3Api::class)
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)

WindowCompat.setDecorFitsSystemWindows(window, false)

window.statusBarColor = Color.Transparent.toArgb()
window.navigationBarColor = Color.Transparent.toArgb()

setContent {
MinimalTheme {
//val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())

Scaffold(
modifier = Modifier
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
containerColor = Color.Magenta,
topBar = {
TopAppBar(
title = { Text("My App") },
modifier = Modifier
.windowInsetsPadding(WindowInsets.statusBars.only(WindowInsetsSides.Horizontal)) // or .Top
.fillMaxWidth(),
//.height(80.dp),
colors = TopAppBarDefaults.topAppBarColors(
containerColor = Color.Red,
titleContentColor = Color.White
),
scrollBehavior = scrollBehavior
//windowInsets = TopAppBarDefaults.windowInsets.only(WindowInsetsSides.top)
)
}
) { scaffoldInnerPadding ->
LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(scaffoldInnerPadding)
.background(Color.Gray),
contentPadding = PaddingValues(16.dp)
) {
items(50) { index ->
Text(
"Item $index",
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 8.dp),
color = Color.Black
)
}
}
}
}
}
}
}

@Composable
fun MinimalTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
Log.d("TransparencyTest", "MinimalTheme SideEffect - START")
val window = (view.context as? android.app.Activity)?.window
if (window == null) {
Log.e("TransparencyTest", "Window is NULL in SideEffect")
return@SideEffect
}

window.statusBarColor = android.graphics.Color.TRANSPARENT // Use framework's transparent
Log.d("TransparencyTest", "statusBarColor RE-SET TO TRANSPARENT in SideEffect")

val insetsController = WindowInsetsControllerCompat(window, view)
insetsController.isAppearanceLightStatusBars = !darkTheme
Log.d("TransparencyTest", "isAppearanceLightStatusBars SET TO ${!darkTheme}")
insetsController.isAppearanceLightNavigationBars = !darkTheme
Log.d("TransparencyTest", "MinimalTheme SideEffect - END")
}
}

MaterialTheme(
colorScheme = if (darkTheme) darkColorScheme() else lightColorScheme(),
typography = Typography(),
content = content
)
}
< /code>
Изменить: я думаю, что комментарий Эдрика, по крайней мере, часть решения. Установка LazyColumn 
S ContentPadding для каркаса , результаты в списке, не запускающемся с самого верха, но под топапбаром :


Подробнее здесь: https://stackoverflow.com/questions/797 ... -extending
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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