NumberPicker Material Style Custom Selection Divider

7.9k Views Asked by At

I wanted to customize number picker selection divider.

number picker selection divider

I created custom drawable to be used for number picker selection divider.

I created custom material style inheriting number picker material style.

<style name="MyNumberPickerTheme" parent="@android:style/Widget.Material.NumberPicker">
    <item name="colorControlNormal ">#2e7d32</item>
    <item name="android:background">#69f0ae</item>
    <item name="selectionDivider">@drawable/my_number_picker_divider</item>
</style>

But selectionDivider property is not recognized. How can I add my custom drawable to number picker material style to set custom selection divider?

1

There are 1 best solutions below

3
On

It seems like there is no easy way to accomplish this. This StackOverflow solution is the only good enough solution in this case. For the sake of other readers, I'll copy/paste the answer here.

private void setDividerColor(NumberPicker picker, Drawable customDrawable) {

    java.lang.reflect.Field[] pickerFields = NumberPicker.class.getDeclaredFields();
    for (java.lang.reflect.Field pf : pickerFields) {
        if (pf.getName().equals("mSelectionDivider")) {
            pf.setAccessible(true);
            try {
                pf.set(picker, customDrawable);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (Resources.NotFoundException e) {
                e.printStackTrace();
            }
            catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            break;
        }
    }
}

And now somewhere in your code, you can call setDividerColor(picker, drawableObject) to set the color of the divider.