如何解决如何创建每行具有不同颜色的微调器
我想创建一个每行具有不同颜色的sppiner,我知道有很多与我的问题类似的解释,但是它们都是Java的,对于我来说这很复杂,我执行这些步骤。
我的代码
val lista = listOf<Mood>(
Mood(resources.getColor(R.color.blue,null),"Color1"),Mood(resources.getColor(R.color.purple,"Color2"),Mood(resources.getColor(R.color.green,"Color3"),Mood(resources.getColor(R.color.darkred,"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")
}
}
我想以此方式创建我的微调器
解决方法
尽管您尚未共享完整的代码,但这实际上是您要做的。
-
将数据模型更改为:
data class Mood(val backgroundColor: Color,val description: String)
-
将项目布局更改为(尽管对于单个
ImageView
布局,您甚至不需要ConstraintLayout
,甚至不需要TextView
,但是我'暂时保留它):<android.support.constraint.ConstraintLayout android:id="@+id/rootLayout" ...> <TextView android:id="@+id/moodText" android:layout_width="wrap_content" android:layout_height="20dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginStart="8dp" android:layout_marginEnd="8dp"/> </android.support.constraint.ConstraintLayout>
-
将
Adapter
类更改为:class MoodArrayAdapter(ctx: Context,moods: List<Mood>) : ArrayAdapter<Mood>(ctx,moods) { override fun getView(position: Int,recycledView: View?,parent: ViewGroup): View { return this.createView(position,recycledView,parent) } override fun getDropDownView(position: Int,parent) } private fun createView(position: Int,parent: ViewGroup): View { val mood = getItem(position) val view = recycledView ?: LayoutInflater.from(context).inflate( R.layout.demo_spinner,parent,false ) view.rootLayout.setBackgroundColor(mood.backgroundColor) view.moodText.text = mood.description return view } }
-
最后,将微调器的适配器设置为:
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)
用于自定义颜色,也可以将数据模型中DataType
的{{1}}更改为backgroundColor
并从中传递颜色资源int
。
编辑-> 要访问此颜色资源,请以:p
colors.xml
因此,将您的代码相应地更改为:
From Activity -> Mood(resources.getColor(R.color.blue,null),"Angry")
From Fragment -> Mood(context.resources.getColor(R.color.blue,"Angry")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。