android - Jetpack 撰写 : TextField clickable does not work

标签 android android-jetpack-compose android-jetpack-compose-text

由于某种原因 Compose TextField 的点击监听器对我不起作用。

@Composable
    private fun ExposedDropdown(
        modifier: Modifier,
        list: List<String>,
        priority: Int
    ) {
        var expanded by remember { mutableStateOf(false) }
        Column(modifier) {
            OutlinedTextField(
                value = list[priority],
                onValueChange = { },
                readOnly = true,
                singleLine = true,
                label = { Text(stringResource(id = R.string.status)) },
                modifier = Modifier
                    .fillMaxWidth()
                    .clickable { Timber.i("Not working :(") }
                    .onFocusChanged { if (it.isFocused) expanded = !expanded },
                trailingIcon = {
                    Icon(
                        imageVector = Icons.Outlined.ArrowDropDown,
                        contentDescription = null,
                        modifier = Modifier
                            .clickable { expanded = !expanded }
                            .padding(16.dp)
                    )
                }
            )
            DropdownMenu(
                expanded = expanded,
                onDismissRequest = { expanded = false }
            ) {
                list.forEach { label ->
                    DropdownMenuItem(onClick = {
                        viewModel.setPriority(list.indexOf(label))
                        expanded = false
                    }) {
                        Text(text = label)
                    }
                }
            }
        }
    }
如您所见,我使用 onFocusChanged 提出了错误的解决方案但它不能很好地工作。
对于那些需要上下文的人,我正在尝试做 ExposedDropdown 但我希望它在我单击 TextField 上的任意位置时打开

最佳答案

用撰写 1.0.2 它默认工作。需要加行enabled = false例子

@Composable
fun SelectableTextField(
    modifier: Modifier = Modifier,
    textValue: String,
    onClick: () -> Unit
) {
    TextField(
        value = textValue,
        onValueChange = {},
        modifier = modifier
            .fillMaxWidth()
            .clickable { onClick() },
        enabled = false
    )
}
要消除涟漪效应,请使用此类扩展
inline fun Modifier.noRippleClickable(crossinline onClick: () -> Unit): Modifier =
    composed {
        clickable(indication = null,
            interactionSource = remember { MutableInteractionSource() }) {
            onClick()
        }
    }

关于android - Jetpack 撰写 : TextField clickable does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67902919/

相关文章:

android - 如何在 Jetpack Compose 中显示 Emoji?

java - 如何在 ListView 中选定的列表项上设置自定义默认铃声?

kotlin - 如何在 jetpack compose 中将光标从一个文本字段传递到另一文本字段?

android - Jetpack Compose 中的倾斜渐变背景

android - 在 Jetpack Compose 中设置焦点顺序的最简单方法是什么?

android - 在撰写 TextField 中格式化数字

java - 更改区域设置不会影响字体类型

c# - Android 图片上传到 C# .NET REST 服务

android - 无法通过 Ubuntu 12.04 上的 Fastboot 解锁 Android bootloader - 等待设备

Android:在jetpack中使用线圈的图像的缓存有效性