I\'m using android spinner and edittext from support lib v21. I would like to align text to left the same like edittext as shown in figure. But, deafult spinner include spac
This Kotlin code is a little bit more succinct than the getView
override in another answer.
It makes it a bit more clear in fewer lines that it is mostly just doing what super does, except that it also overrides setPadding
for the left value.
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return super.getView(position, convertView, parent).apply {
setPadding(0, paddingTop, paddingRight, paddingBottom)
}
}
Here is my full fragment code that uses a data binding object for the complete spinner array adapter override, which also does a selected item and an alternating background color in getDropDownView
:
binding.editSpinner.apply {
this.context ?: return@apply
this.adapter = object : ArrayAdapter(
requireContext(),
android.R.layout.simple_spinner_dropdown_item,
SpinnerTypeValues.values().map { it.text }
) {
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
return super.getDropDownView(position, convertView, parent).also {
when {
position == this@apply.selectedItemPosition -> it.setBackgroundColor( Color.rgb(245, 212, 119) )
position % 2 == 0 -> it.setBackgroundColor(Color.rgb(240, 240, 240))
else -> it.setBackgroundColor(Color.rgb(214, 235, 189))
}
}
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return super.getView(position, convertView, parent).apply {
setPadding(0, paddingTop, paddingRight, paddingBottom)
}
}
}
this.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
viewModel.saveSpinnerSelection(position)
}
}
}