Remove Spacing or Padding in android Spinner

后端 未结 14 1847
旧时难觅i
旧时难觅i 2020-12-15 16:01

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

14条回答
  •  無奈伤痛
    2020-12-15 16:33

    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 setPaddingfor 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)
            }
        }
    }
    

提交回复
热议问题