ti-enxame.com

como mudar o estilo do selecionador de números no android?

Eu quero usar o widget de componente NumberPicker, mas em vez disso, no tema padrão do Holo, eu preciso substituir a cor azul por laranja, já que essa é a cor padrão no meu estilo. Como posso substituir a cor azul e a cor dos números e manter toda a funcionalidade do componente? the default number picker in Holo obrigado

14
user1796624

Faça uma cópia da biblioteca/res/drawable - */numberpicker_selection_divider.9.png e nomeie então, por exemplo, custom_np_sd.9.png.

Substituir o estilo NumberPicker padrão por meio do tema de atividade:

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

E aplique @ style/AppTheme como tema de atividade.

0
Prototik

Infelizmente, você não pode estilizá-lo. Os estilos e atributos de estilo de NumberPicker não estão presentes na API pública, portanto, você não pode defini-los e alterar a aparência padrão. Você só pode selecionar entre o tema claro e escuro.

Como solução, sugiro usar o Android-numberpicker library. A biblioteca é basicamente uma porta do NumberPicker extraída dos códigos-fonte do Android. Mas é melhor que isso, também backports NumberPicker para o Android 2.x. A biblioteca pode ser facilmente estilizada. 

Para estilizar o divisor, ajuste o estilo NPWidget.Holo.NumberPicker e seus atributos selectionDivider e selectionDividerHeight
Para estilizar o texto, ajuste o estilo NPWidget.Holo.EditText.NumberPickerInputText.

23
Tomik

 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>

Crie um plano de fundo na pasta drawable

<?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>
8
Antony jackson

Eu enfrento esse problema também, eu uso refletir para mudar o estilo

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