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
capt.swag 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.