考虑到我已经try 使用像LazyVerticalGrid.Modifier.ill MaxHeight()和Fill MaxSize()这样的修饰符,但没有达到预期的结果,我如何确保Jetpack Compose主导航视图中的IconList在Scaffold组件中使用时占据整个屏幕?
编辑:
根据@Ethan Wu的建议对我的代码进行了一些更改,密度不考虑与topbar一起应用填充
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Preview
@Composable
fun HomeScreenPrev() {
TotalApplicationTheme {
val functionalities = listOf(
Functionality("Search", "Search functionality", Icons.Default.ShoppingCart),
Functionality("Settings", "Settings functionality", Icons.Filled.Face),
Functionality("Like", "Like functionality", Icons.Default.ThumbUp),
Functionality("Warning", "Warning functionality", Icons.Default.Warning),
Functionality("Search", "Search functionality", Icons.Default.Search),
Functionality("Settings", "Settings functionality", Icons.Default.Settings),
)
HomeScreen(functionalities = functionalities)
}
}
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun HomeScreen(functionalities: List<Functionality>) {
Scaffold(
topBar = { MainTopBar() },
) { ActionPanel(functionalities = functionalities, modifier = Modifier.padding(it)) }
}
@Composable
fun ActionPanel(functionalities: List<Functionality>, modifier: Modifier) {
val density = LocalDensity.current
with(density) {
val eachHeight =
(LocalConfiguration.current.screenHeightDp) * density.density / (functionalities.size / 2)
LazyVerticalGrid(
modifier = modifier, columns = GridCells.Fixed(2)
) {
items(functionalities) {
TaskCard(it, modifier = Modifier.height(eachHeight.toDp()))
}
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TaskCard(functionality: Functionality, modifier: Modifier = Modifier) {
Card(modifier = modifier,
shape = RectangleShape,
border = BorderStroke(1.dp, Color.LightGray),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.tertiary, //Card background color
contentColor = Color.Black //Card content color,e.g.text
),
onClick = {
/*TODO*/
}) {
Column(
modifier = Modifier
.padding(8.dp)
.fillMaxWidth()
) {
Spacer(modifier = Modifier.height(8.dp))
Icon(
imageVector = functionality.icon,
contentDescription = null,
modifier = Modifier
.size(48.dp)
.align(Alignment.CenterHorizontally)
)
Spacer(modifier = Modifier.height(8.dp))
Text(text = functionality.name, style = MaterialTheme.typography.titleSmall)
Spacer(modifier = Modifier.height(4.dp))
Text(text = functionality.description, style = MaterialTheme.typography.bodyMedium)
}
}
}
当前结果