Android:如何在数字选择器中去除分割线

19
我该如何在数字选择器中删除分隔线?我尝试通过xml和代码将setShowDivider设置为none(似乎不存在none),但都没有起作用。

我该如何在数字选择器中删除分隔线?我尝试通过xml和代码将setShowDivider设置为none(似乎不存在none),但都没有起作用。

picker.setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);

XML:

android:showDividers="none"

输入图像描述


我曾经使用过与@AdityaVyas-Lakhan的第一个解决方案类似的方法,通过创建自定义主题来实现。如果需要访问透明颜色,请使用android:color/transparent。或者,您可以参考此链接https://dev59.com/2WIj5IYBdhLWcg3wilkI#20291416,并参考Datepicker使用的方法。 - Bhavita Lalwani
4个回答

27

设置Numberpicker的主题

<NumberPicker
   ...
   android:theme="@style/DefaultNumberPickerTheme" />

样式表.xml

<style name="DefaultNumberPickerTheme" parent="AppTheme">
        <item name="colorControlNormal">@color/transparent</item>
</style>

或者

private void changeDividerColor(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;
        }
    }
}

设置为

changeDividerColor(yournumberpicker, Color.parseColor("#00ffffff"));

2
为什么在数字选择器中仅仅删除/隐藏两行如此困难?是否有其他选项可以替代数字选择器? - blackHawk

7
在您的NumberPicker中添加以下代码之一:
XML:android:selectionDividerHeight="0dp" 或者
JAVA:picker.setSelectionDividerHeight(0)

1
selectionDividerHeight 需要 API 级别 29 及以上。 - Salvador

5
有一个简单的解决方案。调用picker.setSelectionDividerHeight(0)即可解决问题。

3
这个属性仅在API级别29及以上使用。 - OwnageByte
再说,这些反射调用在API 29+中已经不再起作用了,所以这是一个很好的解决方案!谢谢! - Tobias Reich

3

这个代码可以更好地实现。

private void changeDividerColor(NumberPicker picker, int color) {
        try {
            Field mField = NumberPicker.class.getDeclaredField("mSelectionDivider");
            mField.setAccessible(true);
            ColorDrawable colorDrawable = new ColorDrawable(color);
            mField.set(picker, colorDrawable);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3
自 Android 9 开始,这不是灰名单反射调用吗?那还能用吗(即将)? 请参阅:https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces - Tobias Reich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接