Jetpack Compose示例报错:No get method providing array access
解决Jetpack Compose Scaffold示例中的colors下标访问错误
你猜的没错,问题确实出在colors变量上!官方示例这里应该是个小疏漏,因为MaterialTheme.colors并不是一个可以用下标访问的数组或列表,它是一个**Colors类型的单例对象**,里面包含了像primary、secondary、background这类单个的颜色属性,所以直接用[]访问肯定会报错。
从你贴出的MaterialTheme源码也能看出来,colors返回的是LocalColors.current,类型是Colors——这个类里并没有定义下标运算符,所以编译器找不到对应的方法,就会报你看到的错误。
下面给你两种可行的修正方案,都能实现原示例中“每行背景色循环切换”的效果:
方案一:自定义颜色列表,用循环切换背景
先创建一个包含主题颜色的列表,之后就可以用下标循环访问了:
// 在LazyColumn的items块内定义颜色列表 val colorList = listOf( colors.primary, colors.secondary, colors.background, colors.surface, colors.error ) Box( Modifier .fillMaxWidth() .height(50.dp) .background(colorList[it % colorList.size]) )
方案二:根据索引匹配主题颜色属性
如果不想额外定义列表,也可以通过when语句根据索引直接选择主题里的颜色:
Box( Modifier .fillMaxWidth() .height(50.dp) .background( when(it % 5) { 0 -> colors.primary 1 -> colors.secondary 2 -> colors.background 3 -> colors.surface else -> colors.error } ) )
作为Jetpack Compose初学者,遇到这种官方示例的小问题时,查看对应类的源码(就像你已经做的那样)是非常好的习惯,能帮你快速搞清楚API的实际用法~
内容的提问来源于stack exchange,提问作者SageJustus
相关产品推荐
相关产品推荐

