Java 如何创建每行具有不同颜色的微调器
我想创建一个每行都有不同颜色的sppiner,我知道有很多解释与我的问题类似,但它们都是Java语言,对我来说很复杂,我执行了这些步骤 我的代码Java 如何创建每行具有不同颜色的微调器,java,android,kotlin,spinner,android-spinner,Java,Android,Kotlin,Spinner,Android Spinner,我想创建一个每行都有不同颜色的sppiner,我知道有很多解释与我的问题类似,但它们都是Java语言,对我来说很复杂,我执行了这些步骤 我的代码 val lista = listOf<Mood>( Mood(resources.getColor(R.color.blue, null), "Color1"), Mood(resources.getColor(R.color.purple, null), "Color2"),
val lista = listOf<Mood>(
Mood(resources.getColor(R.color.blue, null), "Color1"),
Mood(resources.getColor(R.color.purple, null), "Color2"),
Mood(resources.getColor(R.color.green, null), "Color3"),
Mood(resources.getColor(R.color.darkred, null), "Color4")
)
val adaptador = MoodArrayAdapter(this, lista)
spinner1.adapter = adaptador
spinner1.onItemSelectedListener = object :
AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
when (spinner1.selectedItem.toString()) {
"Color1" -> textView.setBackgroundResource(R.color.blue)
"Color2" -> textView.setBackgroundResource(R.color.purple)
"Color3" -> textView.setBackgroundResource(R.color.green)
"Color4" -> textView.setBackgroundResource(R.color.darkred)
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {
TODO("Not yet implemented")
}
}
val lista=listOf(
Mood(resources.getColor(R.color.blue,null),“Color1”),
Mood(resources.getColor(R.color.purple,null),“Color2”),
Mood(resources.getColor(R.color.green,null),“Color3”),
语气(resources.getColor(R.color.darkred,null),“Color4”)
)
val adapter=moodarayadapter(此,列表A)
喷丝头1.适配器=适配器
spinner1.mselectedListener=对象:
AdapterView.OnItemSelectedListener{
已选择覆盖选项(p0:AdapterView?,p1:View?,p2:Int,p3:Long){
何时(spinner1.selectedItem.toString()){
“Color1”->textView.setBackgroundResource(R.color.blue)
“Color2”->textView.setBackgroundResource(R.color.purple)
“Color3”->textView.setBackgroundResource(R.color.green)
“Color4”->textView.setBackgroundResource(R.color.darkred)
}
}
覆盖未选择的乐趣(p0:AdapterView?){
TODO(“尚未实施”)
}
}
我想用这种方式创建微调器
虽然您尚未共享完整的代码,但以下是您实际需要做的事情
data class Mood(val backgroundColor: Color,
val description: String)
ImageView
但是,对于单个TextView
布局,您甚至不需要ConstraintLayout
但是,我暂时保留它):
moodSpinner.adapter = MoodArrayAdapter(
this,
listOf(
Mood(Color.RED, "Angry"),
Mood(Color.GRAY, "Happy"),
Mood(Color.CYAN, "Playful"),
Mood(Color.GREEN, "Wondering")
)
)
Color.ValueOf(r,g,b)
来定制颜色,或者您可以将数据模型中backgroundColor
的数据类型更改为int
,并从colors.xml
传递颜色资源
编辑->要访问此项的颜色资源,请将其作为以下内容传递:
From Activity -> Mood(resources.getColor(R.color.blue,null), "Angry")
From Fragment -> Mood(context.resources.getColor(R.color.blue,null), "Angry")
因此,相应地将代码更改为:
moodSpinner.adapter = MoodArrayAdapter(
this,
listOf(
Mood(resources.getColor(R.color.blue,null), "Angry"),
Mood(resources.getColor(R.color.red,null), "Happy"),
Mood(Color.CYAN, "Playful"),
Mood(Color.GREEN, "Wondering")
)
)
检查Kotlin的示例。使用数据模型作为backgroundColor
传递颜色,并在示例中使用的微调器的项目布局中,然后在适配器的createView()
中,将根布局的id指定为rootLayout
,将传递的颜色数组的相应项设置为rootLayout
作为view.rootLayout.setBackgroundColor(mood.backgroundColor)
。这就是您所需要的,您可以根据需要进一步定制解决方案,首先按照我告诉您的方式实现它,然后您将知道要做什么以及如何做。我创建了一个名为spinner的资源文件,默认情况下,我在constraintlayout中分配了android:id=“@+id/rootLayout”android:background=“@color/colorPrimaryDark”
最后在private fun createView(位置:Int,recycledView:View?,父:ViewGroup):View
我把这行代码View.rootLayout.setBackgroundColor(mood.backgroundColor)
放进去了,但是我得到了红色backgroundColor
如果我错了,我道歉,默认情况下请你帮个大忙。您不必像这里所做的那样硬编码颜色资源:android:background=“@color/colorPrimaryDark”
。您只需在CreateView()
中设置颜色。接下来,如何将这些值添加到数据类中?添加代码,您可能只传递一种颜色:红色。你要做的是,你必须用不同的值传递不同的颜色,以得到不同的颜色。并在问题中添加代码,并通过注释通知我。共享代码,因为我认为您将颜色指定给微调器本身,而不是项目行。再次检查链接,您必须设置显示的每行根布局的背景颜色。我添加了代码,其余代码与教程相同,非常感谢,但我还有一个问题,我在colors.xml中创建了这个color#FF33B5E5@color/blue,我试图在main活动中调用它,比如这个Mood(color.blues,“Angry”),或者在Mood数据类val backgroundColor=(R.color.blues)在这两个部分中,我都遇到了一个错误,您能告诉我应该如何编写和编码来定制colors@JorgeLeonardo检查我已经更新了答案以使用颜色资源。我还有一个问题,明智的老师,我如何才能在选择文本视图中的一行时更改颜色,我已尝试按如下方式执行,但我无法,我已经更新了这个问题。@JorgeLeonardo为此,你必须使用。在onItemSelected()
中,您可以将TextView
的颜色更改为TextView.setBackgroundColor(颜色)
。要根据所选项目更改它,您可以执行var selectedItem=(parent?.selectedItem as Mood)
然后通过if(selectedItem.description.equals(“您的选择”)比较所选的Mood值是否是要更改颜色的值
如果是,则更改文本视图的颜色。这可以通过多种方式完成。
From Activity -> Mood(resources.getColor(R.color.blue,null), "Angry")
From Fragment -> Mood(context.resources.getColor(R.color.blue,null), "Angry")
moodSpinner.adapter = MoodArrayAdapter(
this,
listOf(
Mood(resources.getColor(R.color.blue,null), "Angry"),
Mood(resources.getColor(R.color.red,null), "Happy"),
Mood(Color.CYAN, "Playful"),
Mood(Color.GREEN, "Wondering")
)
)