NumberPicker 分割线设置

2,262 阅读1分钟

NumberPicker自带有分割线,可以将分割线的颜色设置为透明,再给NumberPicker所选项设置背景色,便可修改选择样式

<View
        android:layout_width="216dp"
        android:layout_height="45dp"
        android:background="@drawable/bg_80f5f6fa_round12"
        app:layout_constraintBottom_toBottomOf="@id/np_height"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/np_unit" />

<NumberPicker
        android:id="@+id/np_unit"
        android:layout_width="0dp"
        android:layout_height="160dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="32dp"
        android:layout_marginBottom="20dp"
        android:descendantFocusability="blocksDescendants"
        android:selectionDividerHeight="0dp"
        app:layout_constraintBottom_toTopOf="@id/bt_save"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_weight="1"
        app:layout_constraintTop_toBottomOf="@id/tv_description" />
np_unit.minValue = 0    //  最小值
np_unit.maxValue = 1        // 最大值
np_unit.value = np_unit.minValue        // 当前值
val array = arrayOf(Constant.HeightUnit.CM, Constant.HeightUnit.FITIN)
np_unit.displayedValues = array     //数据显示格式
unit = array[0]

np_unit.setOnValueChangedListener({ picker, oldVal, newVal ->       //监听选中
 			//TODO
                                  })                 
//设置分割线颜色为透明
for (pickerField in np_unit.javaClass.declaredFields) {
            if (pickerField.name.equals("mSelectionDivider")) {     //分割线
                pickerField.isAccessible = true
                val color = context.getDrawable(R.color.colorTransparent)
                pickerField.set(np_unit, color)       //设置透明色
                np_unit.invalidate()      //刷新组件
            }
        }

如图:

截屏2021-03-29下午5.59.00.png