У меня есть представление, в котором мне нужно выбрать одну из трех категорий.
Каждая категория — это кнопка.
Выбранная категория должна иметь черный фон с белым текстом, в то время как другие категории должны иметь белый фон с черным текстом.
Я сделал это, создав кнопку для каждой категории и обновив ее при каждом нажатии. Есть ли лучший способ сделать это?
Что делать, если количество категорий не фиксировано?
val filterBoth: Button = parentView.findViewById(R.id.filter_both)
val filterVeg: Button = parentView.findViewById(R.id.filter_veg)
val filterNonveg: Button = parentView.findViewById(R.id.filter_nonveg)
filterBoth.setOnClickListener(this)
filterVeg.setOnClickListener(this)
filterNonveg.setOnClickListener(this)
override fun onClick(view: View?) {
filterBoth.backgroundTintList = ColorStateList.valueOf(R.color.white)
filterBoth.setTextColor(R.color.black)
filterVeg.backgroundTintList = ColorStateList.valueOf(R.color.white)
filterVeg.setTextColor(R.color.black)
filterNonveg.backgroundTintList = ColorStateList.valueOf(R.color.white)
filterNonveg.setTextColor(R.color.black)
when(view?.id) {
R.id.filter_both -> {
filterBoth.backgroundTintList = ColorStateList.valueOf(R.color.black)
filterBoth.setTextColor(R.color.white)
}
R.id.filter_veg -> {
filterVeg.backgroundTintList = ColorStateList.valueOf(R.color.black)
filterVeg.setTextColor(R.color.white)
}
R.id.filter_nonveg -> {
filterNonveg.backgroundTintList = ColorStateList.valueOf(R.color.black)
filterNonveg.setTextColor(R.color.white)
}
}
}
РЕДАКТИРОВАТЬ Могу ли я как-то использовать RadioButton и RadioGroup для этой функциональности? Как настроить вид радиокнопки на настраиваемый вид как для отмеченного, так и для непроверенного состояния?
Вы можете попробовать что-то вроде этого:
val filterButtons = listOf(filterBoth, filterVeg, filterNonveg)
filterButtons.forEach { btn ->
btn.setOnClickListener {
filterButtons.forEach {
val bgColor = if (it == btn) R.color.black else R.color.white
val textColor = if (it == btn) R.color.white else R.color.black
it.backgroundTintList = ColorStateList.valueOf(bgColor)
it.setTextColor(textColor)
}
}
}
What to do if the number of categories is not fixed?
Просто добавьте больше кнопок в список filterButtons
, и все остальное останется прежним.
Спасибо за код. При дальнейшем изучении, могу ли я установить пользовательский вид в переключателе, так как это позволит достичь той же цели
Кажется, это совсем другой вопрос. Вы должны опубликовать это как новый вопрос.
Вы можете использовать MaterialToggleButtonGroup
с singleSelection
установленным на true. Таким образом, вы можете оформить их как обычно, все обычные состояния кнопок (например, при наведении курсора) будут выглядеть правильно, они будут автоматически снимать галочку, если установлен другой флажок, и они будут лучше работать со службами специальных возможностей.
Вы можете использовать addOnButtonCheckedListener
в макете группы для обработки одной из выбранных кнопок.
Документы по дизайну материалов тоже здесь: https://material.io/components/buttons/android#кнопка-переключатель