colorControlNormal不适用于棒棒糖设备的AppCompat.Dialog

时间:2017-02-05 18:39:08

标签: android android-5.0-lollipop android-styles

我创建了一个自定义的datepicker对话框,它扩展了

Theme.AppCompat.Light.Dialog.Alert

我在values / styles.xml和v21 / styles.xml中创建了一个样式...

该样式的代码是我创建的::

<style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="android:textColorPrimary">@color/accounts_darkgray_text</item>
        <item name="colorControlNormal">@color/graph_rod_red</item>
        <item name="android:windowBackground">@color/transparent</item>
</style>

My custom date picker

在v21及以上版本中使用colorControlNormal我可以更改蓝色分隔符颜色,但在棒棒糖和前棒棒糖设备中,无论我在colorControlNormal中提到什么,它似乎都不接受。

如何更改21和&lt;的分隔符颜色? 21个android设备??

1 个答案:

答案 0 :(得分:0)

我能够解决问题,如果这有助于其他人,思想会分享答案。

我使用反射技术来掌握“分隔符”并从代码隐藏中改变它的颜色。

LinearLayout llFirst = (LinearLayout) datePicker.getChildAt(0);
LinearLayout llSecond = (LinearLayout) llFirst.getChildAt(0);

for (int i = 0; i < llSecond.getChildCount(); i++) {

    // Numberpickers in llSecond
    NumberPicker picker = (NumberPicker) llSecond.getChildAt(i); 
    Field[] pickerFields = NumberPicker.class.getDeclaredFields();

    for (Field pf : pickerFields) {

        if (pf.getName().equals("mSelectionDivider")) {

            pf.setAccessible(true);

            try {
                ColorDrawable colorDrawable = new ColorDrawable(mActivity.getResources()
                      .getColor(R.color.date_picker_divider));
                pf.set(picker,colorDrawable);
            } catch (IllegalArgumentException | Resources.NotFoundException 
                      | IllegalAccessException e) {
                e.printStackTrace();
            }

            break;
        }
    }
}