android - 如何在可组合的文本上实现禁用外观

标签 android material-design android-jetpack-compose

我正在尝试在 Compose 中重新创建首选项屏幕,但我不确定实现项目禁用状态的最佳方法是什么。
以下是禁用状态的示例:

与老TextView我可以很容易地使用 setEnabled() 的方法,这将照顾我禁用点击监听器并更改 textColor。Text()可组合似乎没有实现这个功能,所以我想知道是否有一种简单的方法可以实现相同的结果。
理想情况下,我想找到一种简单的方法来获取默认禁用颜色或默认 alpha 以应用于当前文本颜色以实现禁用外观。

最佳答案

您可以使用 ContentAlpha.disabled .
要将其应用于一堆 View ,您可以提供 LocalContentAlpha :

CompositionLocalProvider(
    LocalContentAlpha provides if (enabled) ContentAlpha.high else ContentAlpha.disabled,
) {
    Text("title", color = Color.DarkGray.copy(LocalContentAlpha.current))
    Text("subtitle", color = Color.LightGray.copy(LocalContentAlpha.current))
}
请注意,为了 LocalContentAlphaLocalContentColor上类,你的Text colorstyle.color参数应该是 Color.Unspecified (这是默认值)。如果直接指定,可以申请ContentAlpha.disabled手动:
Text(
    "your text",
    color = Color.Black.copy(alpha = ContentAlpha.disabled),
    // or if you're using colored style
    style = MaterialTheme.typography.body1.let { style ->
        style.copy(color = style.color.copy(alpha = ContentAlpha.disabled))
    },
    // or just apply alpha modifier to the view
    modifier = Modifier.alpha(ContentAlpha.disabled)
)

关于android - 如何在可组合的文本上实现禁用外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69896192/

相关文章:

android - Eclipse - 在开发时使用组合键 CTRL + Space 显示 android 类?

java - 解析json数据

android - Recyclerview + viewpager,让toolbar崩溃

android - 在 Jetpack compose 中定义 View 权重的问题

android - AlertDialog 否定按钮默认高亮显示

Android 4 - LinearLayout 顶部和底部填充不起作用

angular - 删除 Angular Material 文本框边框,不影响其他组件

android - 同一行的两个 TextInputLayout

Android Compose - 仅在列中对齐中心一个可组合项?

android - Jetpack 撰写 : LazyColumn align each item separately