Anonymous
Как отображать контент поверх topBar в пользовательском интерфейсе Compose
Сообщение
Anonymous » 07 окт 2024, 04:41
Привет, я хочу добиться того, чтобы контент перекрывал верхнюю панель. В XML я использовал возвышение и отрицательное заполнение, и все работало нормально. Я изо всех сил пытаюсь сделать это в пользовательском интерфейсе Compose.
Что у меня есть на данный момент.
Код: Выделить всё
Scaffold(topBar = {
LargeTopAppBar(
colors = TopAppBarDefaults.largeTopAppBarColors(
containerColor = Color.Blue,
titleContentColor = Color.White
),
title = {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(
"Title here",
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = spacedBy(8.dp),
modifier = Modifier.padding(10.dp)
) {
Icon(
modifier = Modifier.size(size = 16.dp),
painter = painterResource(R.drawable.ic_share_white),
contentDescription = stringResource(id = R.string.share)
)
Text(
stringResource(R.string.share),
maxLines = 1,
fontSize = 16.sp,
overflow = TextOverflow.Ellipsis
)
}
}
},
navigationIcon = {
IconButton(onClick = { /* doSomething() */ }) {
Image(
painter = painterResource(R.drawable.ic_back),
contentDescription = stringResource(id = R.string.back),
contentScale = ContentScale.Crop
)
}
},
actions = {
IconButton(onClick = { /* doSomething() */ }) {
Text(
text = "asd",
color = Color.White,
fontSize = 17.sp
)
}
},
scrollBehavior = scrollBehavior
)
}, content = { padding ->
var offset by remember { mutableStateOf(0f) }
Box(
modifier = Modifier
.padding(padding)
.fillMaxSize()
) {
Column(
verticalArrangement = Arrangement.SpaceEvenly,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxSize()
.scrollable(
orientation = Orientation.Vertical,
state = rememberScrollableState { delta ->
offset += delta
delta
}
)
.padding(16.dp)
) {
Box(
modifier = Modifier
.fillMaxSize()
.shadow(
elevation = dimensionResource(
id = R.dimen.card_background_elevation
)
)
.background(
color = Color.White,
shape = RoundedCornerShape(size = 12.dp)
)
.padding(
all = dimensionResource(
id = R.dimen.card_background_top_margin
)
),
){
Text(text = "Hello World")
}
}
}
})
Чего я хочу (скриншот отличается от кода)
Подробнее здесь:
https://stackoverflow.com/questions/758 ... compose-ui
1728265263
Anonymous
Привет, я хочу добиться того, чтобы контент перекрывал верхнюю панель. В XML я использовал возвышение и отрицательное заполнение, и все работало нормально. Я изо всех сил пытаюсь сделать это в пользовательском интерфейсе Compose. Что у меня есть на данный момент. [code]Scaffold(topBar = { LargeTopAppBar( colors = TopAppBarDefaults.largeTopAppBarColors( containerColor = Color.Blue, titleContentColor = Color.White ), title = { Row( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween ) { Text( "Title here", maxLines = 1, overflow = TextOverflow.Ellipsis ) Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = spacedBy(8.dp), modifier = Modifier.padding(10.dp) ) { Icon( modifier = Modifier.size(size = 16.dp), painter = painterResource(R.drawable.ic_share_white), contentDescription = stringResource(id = R.string.share) ) Text( stringResource(R.string.share), maxLines = 1, fontSize = 16.sp, overflow = TextOverflow.Ellipsis ) } } }, navigationIcon = { IconButton(onClick = { /* doSomething() */ }) { Image( painter = painterResource(R.drawable.ic_back), contentDescription = stringResource(id = R.string.back), contentScale = ContentScale.Crop ) } }, actions = { IconButton(onClick = { /* doSomething() */ }) { Text( text = "asd", color = Color.White, fontSize = 17.sp ) } }, scrollBehavior = scrollBehavior ) }, content = { padding -> var offset by remember { mutableStateOf(0f) } Box( modifier = Modifier .padding(padding) .fillMaxSize() ) { Column( verticalArrangement = Arrangement.SpaceEvenly, horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .fillMaxSize() .scrollable( orientation = Orientation.Vertical, state = rememberScrollableState { delta -> offset += delta delta } ) .padding(16.dp) ) { Box( modifier = Modifier .fillMaxSize() .shadow( elevation = dimensionResource( id = R.dimen.card_background_elevation ) ) .background( color = Color.White, shape = RoundedCornerShape(size = 12.dp) ) .padding( all = dimensionResource( id = R.dimen.card_background_top_margin ) ), ){ Text(text = "Hello World") } } } }) [/code] Чего я хочу (скриншот отличается от кода) [img]https://i.sstatic.net/Qj8hI. png[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/75873820/how-to-display-content-over-topbar-in-compose-ui[/url]