Android: как удалить разделительные линии в средстве выбора чисел

Как я могу удалить разделительные линии в средстве выбора чисел, я попытался установить для setShowDivider значение none (кажется, что ни один не существует) через xml, и сработало замечание кода

picker.setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);

XML:

android:showDividers="none"

введите описание изображения здесь


person blackHawk    schedule 13.06.2017    source источник
comment
Я использовал решение, аналогичное первому, от @AdityaVyas-Lakhan, создав пользовательскую тему. Используйте android:color/transparent для доступа к прозрачному цвету, если это поможет. Кроме того, вы можете сослаться на этот stackoverflow.com/questions/20148671/ и обратиться к подходу, используемому для средства выбора даты.   -  person Bhavita Lalwani    schedule 13.06.2017


Ответы (4)


Установить тему для 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"));
person Aditya Vyas-Lakhan    schedule 13.06.2017
comment
почему так сложно удалить/сделать невидимыми всего 2 строки в средстве выбора номера? любой другой вариант вместо выбора номера? - person blackHawk; 13.06.2017

Добавьте одну из этих строк в свой NumberPicker

XML: android:selectionDividerHeight="0dp"

OR

ЯВА: picker.setSelectionDividerHeight(0)

person Saiful Islam    schedule 31.08.2020

этот код будет лучше

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();
        }
    }
person coffee    schedule 08.01.2018
comment
Разве это не вызов отражения серого списка с Android 9? Это все еще работает (скоро)? См.: developer.android.com/distribute/best- практика/разработка/ - person Tobias Reich; 07.08.2019

Есть простое решение. Звонок picker.setSelectionDividerHeight(0) может помочь.

person Ilnar Ramazanov    schedule 21.05.2020
comment
Этот атрибут используется только на уровне API 29 и выше. - person OwnageByte; 26.08.2020
comment
Опять же, эти вызовы отражения больше не работают в API 29+, так что это отличное решение! Спасибо! - person Tobias Reich; 22.09.2020