0

我想定制数字选择器选择分隔线。NumberPicker材质样式自定义选择分隔线

number picker selection divider

我创建了自定义绘制用于数字选择器选择分频器。

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

<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属性无法识别。如何将我的自定义绘图添加到数字选取器材质样式以设置自定义选择分隔线?

+0

检查此https://stackoverflow.com/questions/20148671/android-how-to-change-the-color-of-the-datepicker-divider/20291416#20291416。 – Raghunandan

+0

这没有用。它不是我想改变的选择分隔线的颜色。我创建了一个可用作数字选择器的选择分隔符的drawable。但不能将它分配给数字选择器,因为selectionDivider属性无法识别出现编译错误,即使是android:selectionDivider同样的问题。 –

+0

你可以设置一个drawable我还没试过。但发布的链接有一个使用反射的答案,并且还提供了一个库。看看答案相应地修改它 – Raghunandan

回答

0

看起来好像没有简单的方法来实现这一点。在这种情况下,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(选择器,drawableObject)设置分隔条的颜色。

+0

我不想改变选择分隔线的颜色。我想使用自定义drawable(不同形状)作为选择分隔线。 –

+0

我已经更新了支持drawable的答案。 –