Вставки, применяемые на верхней панели, становятся прозрачными?

#android #android-jetpack-compose

Вопрос:

Я пытаюсь создать экран с контентом, начинающимся прямо за верхней панелью приложений, используя accompanist-insets . Однако панель приложений всегда прозрачна.

Как сделать его сплошной/непрозрачной панелью навигации?

Выходной ток

ezgif com-gif-создатель

Код

 val scrollState = rememberLazyListState()
var isScrollStateChanged by remember { mutableStateOf(false) }
isScrollStateChanged = scrollState.firstVisibleItemScrollOffset != 0

val position by animateFloatAsState(if (isScrollStateChanged) 0f else -45f)
val listItems = (1..100).toList()

ProvideWindowInsets {
    Surface(
        modifier = Modifier
            .fillMaxSize()
            .systemBarsPadding(),
        color = Color.White
    ) {
        Box(Modifier.fillMaxSize()) {
            TopAppBar(
                content = { Text("Hello nav bar!") },
                modifier = Modifier
                    .offset(0.dp, position.dp)
                    .alpha(min(1f, 1   (position / 45f)))
                    .navigationBarsPadding(bottom = false),
                backgroundColor = Color.Red
            )
            LazyColumn(
                state = scrollState
            ) {
                items(items = listItems) {
                    Text(
                        "Hello $it",
                        Modifier
                            .padding(20.dp)
                            .fillMaxWidth()
                    )
                }
            }
        }
    }
}
 

Ответ №1:

У него нет прозрачного фона. На самом деле он LazyColumn имеет прозрачный фон и TopAppBar помещен под ним.

С помощью Box вы кладете предметы друг на друга, так что второй будет находиться под первым. Измените их порядок:

 Box(Modifier.fillMaxSize()) {
    LazyColumn(
        state = scrollState
    ) {
        items(items = listItems) {
            Text(
                "Hello $it",
                Modifier
                    .padding(20.dp)
                    .fillMaxWidth()
            )
        }
    }
    TopAppBar(
        content = { Text("Hello nav bar!") },
        modifier = Modifier
            .offset(0.dp, position.dp)
            .alpha(min(1f, 1   (position / 45f)))
            .navigationBarsPadding(bottom = false),
        backgroundColor = Color.Red
    )
}
 

Комментарии:

1. Я чувствую себя такой глупой сейчас. лол. Спасибо, Филип.