【问题标题】:LazyColumn does not fit to its contents in dialogLazyColumn 不适合其在对话框中的内容
【发布时间】:2021-05-13 05:16:51
【问题描述】:

我在对话框内有一个 LazyColumn,在一个简单列内,该列还包含对话框末尾的一排按钮(取消和设置),以前我在 LazyColumn 上使用 weight(1f) 修饰符来占据大部分对话框的高度然后为按钮行提供剩余空间,但问题是 权重修饰符会导致列表扩展完整高度,即使它是空的,如果我没有设置权重修饰符,那么 当 LazyColumn 的内容超过 LazyColumn 时,LazyColumn 开始占据列的全高,即使滚动也找不到按钮行。

我想让我的按钮行与对话框底部对齐,并且 LazyColumn 的高度与其内容一样多,而不占用按钮行的空间。

这是我的代码

Column{
    LazyColumn(modifier = Modifier.weight(1f)){
       items(myItems){ item->
          DisplayItem(item)
       }
    }
    Row{
       Button{}
       Button{}
    }
}

【问题讨论】:

    标签: android android-jetpack-compose


    【解决方案1】:

    由于按钮行必须始终可见,警报对话框提供了一个可组合的方式来向其中添加按钮,我们可以使用该实现

    您可以尝试更改项目数以查看问题,在第二种情况下,当项目数超过并且必须进行滚动时,即使应该在屏幕上也看不到按钮行!

    这会起作用(不理想)

    AlertDialog(
        onDismissRequest = { /*TODO*/ },
        text = {
            LazyColumn{
                items(10){ num->
                    Text(text = num.toString())
                }
            }
        },
        buttons = {
            Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.End) {
                Button(onClick = { /*TODO*/ }) {
                    Text(text = "Cancel")
                }
                Button(onClick = { /*TODO*/ }) {
                    Text(text = "Confirm")
                }
            }
        }
    )
    

    这行不通

    Dialog(onDismissRequest = { /*TODO*/ }) {
        Column(modifier = Modifier.background(color = MaterialTheme.colors.background)) {
            LazyColumn{
                items(40){ num->
                    Text(text = num.toString())
                }
            }
            Row(modifier = Modifier.fillMaxWidth(),horizontalArrangement = Arrangement.End) {
                Button(onClick = { /*TODO*/ }) {
                    Text(text = "Cancel")
                }
                Button(onClick = { /*TODO*/ }) {
                    Text(text = "Confirm")
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以为 AlertDialog 设置一个修饰符来限制对话框的高度。 一排按钮可见。

      AlertDialog(
          onDismissRequest = onDismiss,
          modifier = Modifier.fillMaxHeight(.95f),
          buttons = {
              TextButton(onClick = { /*TODO*/ } ) {
                  Text(stringResource(id = android.R.string.ok))
              }
          },
          text = {
              LazyColumn(modifier = Modifier.fillMaxSize()) {
                  items(40){ num->
                      Text(text = num.toString())
                  }
              }
          }
      )
      

      【讨论】:

      • AlertDialog 已经可以了,不用设置修饰符,其他的对话框不行,试试代码
      猜你喜欢
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2015-12-24
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多