我有一个具有 Base.Theme.AppCompat.Light.Dialog
的 android Activity 作为平板电脑上的主题,因此显示在对话框中。
当我使用 XML 布局时,我可以为布局设置一个带有包装内容的最小高度,这样它就可以
使用 Jetpack Compose 的脚手架我正在努力重建这种行为。即使没有内容,对话框也总是与屏幕允许的一样高。
我尝试了以下修饰符作为脚手架的参数:
Modifier.wrapContentHeight()
- 对话框仍然和屏幕一样高Modifier.defaultMinSize(minHeight = 250.dp)
- 对话框仍然和屏幕一样高Modifier.height(height = 250.dp)
- 现在它变小了,但固定为那个大小,当有更多内容时不会增长Modifier.requiredHeightIn(min = 250.dp, max = getMyScreenHeightinDp())
- 对话框仍然和屏幕一样高由于您可以使用
.height(...)
降低脚手架的高度修饰符我认为也应该可以重新创建包装内容行为。但是怎么做?
最佳答案
使用 requiredHeightIn
确实有效,如下面的代码中测试的那样。在此列表中,高度从 150.dp 到 400.dp 不等。如果您只提供 10 件元素,则为 150.dp。当您添加更多项目时,它会增加高度,但最多只能达到 400.dp。
但是,有一个问题。抽屉导航从屏幕左侧滑出,而不是从对话框左侧滑出。有办法解决这个问题。您可以用自己的自定义抽屉替换抽屉导航。我做过一次,它可以做到。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startActivity(intent)
setContent {
Dialog(
onDismissRequest = { },
properties = DialogProperties(dismissOnClickOutside = false)
) {
val scaffoldState = rememberScaffoldState()
val scope = rememberCoroutineScope()
Scaffold(
modifier = Modifier.requiredHeightIn(min = 150.dp, max = 400.dp),
scaffoldState = scaffoldState,
drawerContent = { Text("Drawer content") },
topBar = {
TopAppBar(
title = { Text("Simple Scaffold Screen") },
navigationIcon = {
IconButton(
onClick = {
scope.launch { scaffoldState.drawerState.open() }
}
) {
Icon(Icons.Filled.Menu, contentDescription = "Localized description")
}
}
)
},
floatingActionButtonPosition = FabPosition.End,
floatingActionButton = {
ExtendedFloatingActionButton(
text = { Text("Inc") },
onClick = { /* fab click handler */ }
)
},
content = { innerPadding ->
LazyColumn(contentPadding = innerPadding) {
items(count = 100) {
Text(it.toString())
}
}
}
)
}
}
}
}
关于android - 如何防止喷气背包组合脚手架在对话框中显示时占据屏幕的整个高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70288692/