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"),

我想创建一个每行都有不同颜色的sppiner,我知道有很多解释与我的问题类似,但它们都是Java语言,对我来说很复杂,我执行了这些步骤

我的代码

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")
        )
    )
    
  • 现在,您可以根据自己的需要更改“mood”一词所在的变量/名称。此外,我正在传递颜色,您可以使用
    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")
        )
    )