Skip to content
This repository was archived by the owner on Sep 3, 2023. It is now read-only.

Commit 0245949

Browse files
shynlineafollestad
authored andcommitted
Resolves #1961, allow choice list control color to be changed programatically (#1972)
* Change RadioButton's colors programmatically * Update sample to demonstrate changing RadioButton's colors programmatically
1 parent 23ce319 commit 0245949

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

core/src/main/java/com/afollestad/materialdialogs/internal/list/SingleChoiceDialogAdapter.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import android.view.View
1919
import android.view.View.OnClickListener
2020
import android.view.ViewGroup
2121
import android.widget.TextView
22+
import androidx.annotation.ColorInt
2223
import androidx.appcompat.widget.AppCompatRadioButton
2324
import androidx.core.widget.CompoundButtonCompat
2425
import androidx.recyclerview.widget.RecyclerView
@@ -72,7 +73,9 @@ internal class SingleChoiceDialogAdapter(
7273
disabledItems: IntArray?,
7374
initialSelection: Int,
7475
private val waitForActionButton: Boolean,
75-
internal var selection: SingleChoiceListener
76+
internal var selection: SingleChoiceListener,
77+
@ColorInt private val checkedColor: Int,
78+
@ColorInt private val uncheckedColor: Int
7679
) : RecyclerView.Adapter<SingleChoiceViewHolder>(),
7780
DialogAdapter<CharSequence, SingleChoiceListener> {
7881

@@ -117,7 +120,10 @@ internal class SingleChoiceDialogAdapter(
117120
.let {
118121
CompoundButtonCompat.setButtonTintList(
119122
viewHolder.controlView,
120-
createColorSelector(dialog.windowContext, checked = it[0], unchecked = it[1])
123+
createColorSelector(dialog.windowContext,
124+
checked = if (checkedColor == -1) it[0] else checkedColor,
125+
unchecked = if (uncheckedColor == -1) it[1] else uncheckedColor
126+
)
121127
)
122128
}
123129

core/src/main/java/com/afollestad/materialdialogs/list/DialogSingleChoiceExt.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package com.afollestad.materialdialogs.list
2020
import android.util.Log
2121
import androidx.annotation.ArrayRes
2222
import androidx.annotation.CheckResult
23+
import androidx.annotation.ColorInt
2324
import com.afollestad.materialdialogs.MaterialDialog
2425
import com.afollestad.materialdialogs.WhichButton.POSITIVE
2526
import com.afollestad.materialdialogs.actions.setActionButtonEnabled
@@ -42,6 +43,8 @@ import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
4243
disabledIndices: IntArray? = null,
4344
initialSelection: Int = -1,
4445
waitForPositiveButton: Boolean = true,
46+
@ColorInt checkedColor: Int = -1,
47+
@ColorInt uncheckedColor: Int = -1,
4548
selection: SingleChoiceListener = null
4649
): MaterialDialog {
4750
assertOneSet("listItemsSingleChoice", items, res)
@@ -72,7 +75,9 @@ import com.afollestad.materialdialogs.utils.MDUtil.getStringArray
7275
disabledItems = disabledIndices,
7376
initialSelection = initialSelection,
7477
waitForActionButton = waitForPositiveButton,
75-
selection = selection
78+
selection = selection,
79+
checkedColor = checkedColor,
80+
uncheckedColor = uncheckedColor
7681
)
7782
)
7883
}

sample/src/main/java/com/afollestad/materialdialogssample/MainActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,20 @@ class MainActivity : AppCompatActivity() {
333333
}
334334
}
335335

336+
R.id.single_choice_custom_radio_color.onClickDebounced {
337+
MaterialDialog(this).show {
338+
title(R.string.socialNetworks)
339+
listItemsSingleChoice(
340+
R.array.socialNetworks, initialSelection = 1, checkedColor = Color.RED, uncheckedColor = Color.CYAN
341+
) { _, index, text ->
342+
toast("Selected item $text at index $index")
343+
}
344+
positiveButton(R.string.choose)
345+
debugMode(debugMode)
346+
lifecycleOwner(this@MainActivity)
347+
}
348+
}
349+
336350
R.id.multiple_choice.onClickDebounced {
337351
MaterialDialog(this).show {
338352
title(R.string.socialNetworks)

sample/src/main/res/layout/activity_main.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,12 @@
168168
style="@style/SampleButton"
169169
/>
170170

171+
<Button
172+
android:id="@+id/single_choice_custom_radio_color"
173+
android:text="Single Choice, Custom Radio Color"
174+
style="@style/SampleButton"
175+
/>
176+
171177
<!-- Multiple Choice Lists -->
172178

173179
<TextView

0 commit comments

Comments
 (0)