I want to use the NumberPicker component-widget but Instead in the default Holo theme I need to replace the blue color with orange since that is the default color in my styling.
How can I replace the blue color and the color of the numbers,and keep all of the functionality of the component?
thanks

- 3,665
- 7
- 38
- 65
-
1Why Google doesn't allow styling NumberPicker – Eugen Martynov Nov 25 '14 at 10:14
5 Answers
Unfortunately, you can't style it. The styles and styling attributes for NumberPicker
are not present in the public API, therefore you can't set them and change the default look. You can only select between light and dark theme.
As a solution I would suggest to use android-numberpicker library instead. The library is basically a port of NumberPicker extracted from Android source codes. But it's better than that, it also backports NumberPicker
to Android 2.x. The library can be easily styled.
To style the divider adjust NPWidget.Holo.NumberPicker
style and its selectionDivider
and selectionDividerHeight
attributes.
To style the text adjust NPWidget.Holo.EditText.NumberPickerInputText
style.

- 23,857
- 8
- 121
- 100
-
but by using the library you suggested the scroll functionality of the component is lost, I would really like to keep this functionality – user1796624 Feb 25 '13 at 09:30
-
-
1
-
@SomeoneSomewhere Old comment, I know. You need to override `android:textColorPrimary` in your base theme. This can _possibly_ affect other TextViews' text color (if one is not set explicitly). But, this behavior can be contained on the `Activity` level. – Vikram Mar 28 '15 at 08:21
-
What is the use of this library if this too can't style the text for itself? I cannot override `android:textColorPrimary`, as I've already done so differently, – SlashG Jul 23 '15 at 09:48
-
Adding that the public attributes are marked by the framework using this [res/values/public.xml](https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/public.xml). Also, here is a bit more context about [how it works](http://stackoverflow.com/questions/9348614/what-is-the-use-of-the-res-values-public-xml-file-on-android?answertab=votes#tab-top) – Pedro Lopes Dec 23 '16 at 00:45
Preview of a customized number picker:
<NumberPicker
android:id="@+id/np"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerHorizontal="true"
android:background="@drawable/drawablenp"
android:layout_centerVertical="true"/>
Create the background xml in the drawable folder named "drawablenp.xml"
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#707070"
android:centerColor="#f8f8f8"
android:endColor="#707070"
android:angle="270"/>
</shape>

- 9,724
- 11
- 63
- 92

- 247
- 3
- 5
Make copy of library/res/drawable-*/numberpicker_selection_divider.9.png and name then, for example, custom_np_sd.9.png.
Override default NumberPicker style via activity theme:
<style name="AppTheme" parent="@style/Holo.Theme">
<item name="numberPickerStyle">@style/CustomNPStyle</item>
</style>
<style name="CustomNPStyle" parent="@style/Holo.NumberPicker">
<item name="selectionDivider">@drawable/custom_np_sd</item>
</style>
And apply @style/AppTheme as activity theme.

- 935
- 4
- 7
-
4
-
6Not working Error: Error retrieving parent for item: No resource found that matches the given name '@android:style/Widget.Holo.NumberPicker'. Error: No resource found that matches the given name: attr 'android:selectionDivider'. – zdarsky.peter May 03 '14 at 20:51
-
I faced this problem too. I really want to have nice NumberPicker
UI. All answer in this question worked but very limited. I almost create my own RecylerView
to create the NumberPicker
I want. Apparently I found neat library which is very robust. Here is the link https://github.com/Carbs0126/NumberPickerView
Not trying to answer the question here. Just want to help someone with the same problem as I am.

- 1,588
- 1
- 7
- 11
I face this problem too, I use reflect to change the style
public class MyNumberPicker extends NumberPicker {
public MyNumberPicker(Context context) {
super(context);
setNumberPickerDivider();
}
public MyNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
setNumberPickerDivider();
}
public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setNumberPickerDivider();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
setNumberPickerDivider();
}
@Override
public void addView(View child) {
super.addView(child);
updateView(child);
}
@Override
public void addView(View child, int index, android.view.ViewGroup.LayoutParams params) {
super.addView(child, index, params);
updateView(child);
}
@Override
public void addView(View child, android.view.ViewGroup.LayoutParams params) {
super.addView(child, params);
updateView(child);
}
public void updateView(View view) {
if (view instanceof EditText) {
EditText et = (EditText) view;
et.setTextColor(ContextCompat.getColor(getContext(), R.color.font_content));
et.setTextSize(16);
}
}
private void setNumberPickerDivider() {
try {
{
Field field = NumberPicker.class.getDeclaredField("mSelectionDivider");
field.setAccessible(true);
field.set(this, ContextCompat.getDrawable(getContext(), R.drawable.horizontal_divider));
}
{
Field field = NumberPicker.class.getDeclaredField("mSelectionDividerHeight");
field.setAccessible(true);
field.set(this, 1);
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}

- 767
- 1
- 10
- 21
-
Will not work on 28+ API. https://developer.android.com/about/versions/10/non-sdk-q?authuser=1 – AlexS Dec 25 '20 at 09:05