如何在android中更改数字选择器样式?

时间:2013-02-22 19:17:41

标签: android android-widget android-holo-everywhere

我想使用NumberPicker组件小部件但是在默认的Holo主题中,我需要用橙色替换蓝色,因为这是我造型中的默认颜色。 如何更换蓝色和数字的颜色,并保留组件的所有功能? the default number picker in Holo 感谢

5 个答案:

答案 0 :(得分:23)

不幸的是,你无法设计风格。 NumberPicker的样式和样式属性在公共API中不存在,因此您无法设置它们并更改默认外观。您只能在明暗主题之间进行选择。

作为解决方案,我建议使用android-numberpicker库。该库基本上是从Android源代码中提取的NumberPicker的端口。但它比这更好,它也向{2.}}反向移植到Android 2.x.图书馆可以很容易地设计风格。

要设置分隔符的样式,请调整NumberPicker样式及其NPWidget.Holo.NumberPickerselectionDivider属性。
要设置文字样式,请调整selectionDividerHeight样式。

答案 1 :(得分:8)

enter image description here



<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"></NumberPicker>
&#13;
&#13;
&#13;

  

在可绘制文件夹中创建背景

<?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>

答案 2 :(得分:1)

我也面临这个问题,我使用反射来更改样式

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();
        }
    }
}

答案 3 :(得分:0)

复制library / res / drawable - * / numberpicker_selection_divider.9.png然后命名,例如custom_np_sd.9.png。

通过活动主题覆盖默认的NumberPicker样式:

<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>

并将@ style / AppTheme应用为活动主题。

答案 4 :(得分:0)

我也遇到了这个问题。我真的很想拥有一个不错的NumberPicker UI。这个问题的所有答案都有效,但是非常有限。我几乎要创建自己的RecylerView来创建自己想要的NumberPicker。显然我发现整洁的库非常强大。这是链接https://github.com/Carbs0126/NumberPickerView

不尝试在此处回答问题。只是想帮助与我有同样问题的人。