更改Android NumberPicker上的布局

时间:2012-12-07 14:33:18

标签: android android-layout android-widget

有没有办法更改Android NumberPicker上两条水平线的颜色?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

解决方案1 ​​

如果您只想更改NumberPicker here的颜色,这是使用以下内容的非常简单的解决方案。

private void setDividerColor(NumberPicker picker, int color) {

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

然后调用这样的函数

setDividerColor(mNumberPicker, Color.GREEN);

解决方案2

尽管第一个解决方案很简单,但是它受到限制。我建议使用this存储库,该存储库提供MaterialNumberPickers,允许进行更多的自定义。有关于如何在回购的自述文件中添加Gradle依赖关系的说明,因此在这里我将不包括它们,但是可以按如下所示在xml中添加MaterialNumberPickers。

<com.github.stephenvinouze.materialnumberpickercore.MaterialNumberPicker
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:mnpMaxValue="50"
    app:mnpMinValue="1"
    app:mnpEditable="false"
    app:mnpFontname="Hand.ttf"
    app:mnpSeparatorColor="@color/colorAccent"
    app:mnpTextColor="@color/colorPrimary"
    app:mnpTextSize="16sp"
    app:mnpTextStyle="bold"
    app:mnpValue="10"
    app:mnpWrapped="false" />

此外,MaterialNumberPicker扩展了NumberPicker,因此在xml中进行此更改将不需要在.java文件中进行任何后端更改。