【问题标题】:NumberPicker Material Style Custom Selection Divider [duplicate]NumberPicker 材质样式自定义选择分隔线 [重复]
【发布时间】:2018-03-21 09:53:11
【问题描述】:

我想自定义数字选择器选择分隔符。

我创建了用于数字选择器选择分隔符的自定义可绘制对象。

我创建了继承数字选择器材质样式的自定义材质样式。

<style name="MyNumberPickerTheme" parent="@android:style/Widget.Material.NumberPicker">
    <item name="colorControlNormal ">#2e7d32</item>
    <item name="android:background">#69f0ae</item>
    <item name="selectionDivider">@drawable/my_number_picker_divider</item>
</style>

但 selectionDivider 属性无法识别。如何将自定义可绘制对象添加到数字选择器材质样式以设置自定义选择分隔符?

【问题讨论】:

  • 那没用。它不是我要更改的选择分隔线的颜色。我创建了一个可绘制对象用作数字选择器的选择分隔符。但不能将其分配给数字选择器,因为 selectionDivider 属性无法识别,出现编译错误,即使是 android:selectionDivider 也是同样的问题。
  • 你可以设置一个我没试过的drawable。但发布的链接有一个使用反射的答案,还建议使用一个库。看看答案相应修改它

标签: android material-design numberpicker android-number-picker


【解决方案1】:

似乎没有简单的方法可以做到这一点。在这种情况下,This StackOverflow solution 是唯一足够好的解决方案。 为了其他读者,我将在此处复制/粘贴答案。

private void setDividerColor(NumberPicker picker, Drawable customDrawable) {

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

现在在您的代码中,您可以调用 setDividerColor(picker, drawableObject) 来设置分隔线的颜色。

【讨论】:

  • 我不想改变选择分隔线的颜色。我想使用自定义可绘制(不同形状)作为选择分隔符。
  • 我已经更新了支持drawable的答案。
  • 这是错误的,您不需要使用反射来解决此问题。改用主题覆盖来更改 colorControlNormal 的值。
猜你喜欢
  • 2020-04-18
  • 2019-07-03
  • 2022-01-18
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 2019-04-27
相关资源
最近更新 更多