撰写中的自动完成文本视图

时间:2021-03-17 15:02:47

标签: android android-jetpack-compose

我想在 compose 中创建一个自动完成文本视图,并且我创建了一个包含 TextField 和一个 DropDown 菜单的组合项。我在此解决方案中看到的问题是,当下拉菜单展开时,文本字段不再可操作,我无法在其中键入任何文本。关于如何解决这个问题的任何建议?代码如下

@Composable
fun AutoCompleteText(
    value: String,
    onValueChange: (String) -> Unit,
    onOptionSelected: (String) -> Unit,
    modifier: Modifier = Modifier,
    label: @Composable (() -> Unit)? = null,
    suggestions: List<String> = emptyList()
) {
    Column(modifier = modifier) {
        OutlinedTextField(
            value = value,
            onValueChange = { text -> if (text !== value) onValueChange(text) },
            modifier = Modifier.fillMaxWidth(),
            label = label,
        )
        DropdownMenu(
            expanded = suggestions.isNotEmpty(),
            onDismissRequest = {  },
            modifier = Modifier.fillMaxWidth()
        ) {
            suggestions.forEach { label ->
                DropdownMenuItem(onClick = {
                    onOptionSelected(label)
                }) {
                    Text(text = label)
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

DropdownMenu 有一个名为 PopupProperties 的属性,您可以使用它来禁用可聚焦性。这应该让您能够继续在 OutlinedTextField 中输入:

OutlinedTextField(
  value = value,
  onValueChange = { text -> if (text !== value) onValueChange(text) },
  modifier = Modifier.fillMaxWidth(),
  label = label,
)
DropdownMenu(
  expanded = suggestions.isNotEmpty(),
  onDismissRequest = {  },
  modifier = Modifier.fillMaxWidth(),
  // This line here will accomplish what you want
  properties = PopupProperties(focusable = false)
) {
  suggestions.forEach { label ->
    DropdownMenuItem(onClick = {
      onOptionSelected(label)
    }) {
      Text(text = label)
    }
  }
}