我有一個視圖,我需要在其中選擇三個類別之一。
每個類別都是一個按鈕。
所選類別應具有黑色背景和白色文本,而其他類別應具有白色背景和黑色文本。
我通過為每個類別創建按鈕并更新每個點擊事件來完成它。有沒有更好的方法呢?
類別數不固定怎么辦?
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 來實作此功能嗎?如何將單選按鈕視圖設定為選中和未選中狀態的自定義視圖?
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
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)
}
}
}
類別數不固定怎么辦?
只需在filterButtons串列中添加更多按鈕,其他一切都保持不變。
uj5u.com熱心網友回復:
您可以使用MaterialToggleButtonGroup設定singleSelection為 true。這樣你就可以像往常一樣為它們設定主題,所有常用的按鈕狀態(如懸停)都會看起來正確,如果選中另一個,它們會自動取消選中,并且它們會更好地與無障礙服務配合使用。
您可以addOnButtonCheckedListener在組布局上使用來處理正在選擇的按鈕之一。
材料設計檔案也在這里:https ://material.io/components/buttons/android#toggle-button
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/476982.html
