写在前面:Android里有时候会出现一个很恶心的特性:明明XML设置和代码里动态加进去的设置参数一样,按道理来说效果应该一样,但是却不一样。。。。。。
我在使用SeekBar的时候就发现了这个恶心的特点,下面记录一下,免得再有无辜者被折磨。
首先,先看下我XML中对SeekBar最大最小的设置:
<com.color.notification.view.quick_settings.CustomSeekBar_Brightness
android:id="@+id/brightnessSeekBar"
android:layout_width="190dp"
android:layout_height="20dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="false"
android:max="255"
android:min="0"
android:paddingStart="0dp"
android:paddingEnd="0dp"
android:background="@android:color/transparent"
android:progressDrawable="@drawable/custom_brightness_seekbar"
android:thumb="@null" />
最大值255,最小值0。当我开发完和同事激情对接时,却发现了问题:他哪边也在改亮度,也用了SeekBar,最大值最小值也设置成了255、0,我需要和他做一个同步,就是用户调节亮度,我们两边的表现是一致的,但是问题来了——》我这边用遥控器遥控,左右调节每次都只能调1%,他哪边却是每次5%,我就问他做了什么客制化修改吗?他说完全没有,我们就激情交流了一会,然后我检查了下他的代码,确实没什么特别修改的地方,只是最大值最小值设定改在了代码里如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
brightnessSeekBar.setMin(0);
}
brightnessSeekBar.setMax(255);
我感觉哪里有问题都不会是这里有问题,结果还是我天真了。。。。。。最终排查下来,我是ZZ。“Android敢杀我的马!!!!!”
这两个有区别吗?放一起看下:
android:max="255"
android:min="0"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
brightnessSeekBar.setMin(0);
}
brightnessSeekBar.setMax(255);
写在末尾:如果你用了SeekBar且有遥控的需求,千万注意——》XML中设置最大值最小值,和代码中初始化SeekBar时同态设置最大值最小值,即使参数一样,最后遥控器调节展现的效果是不一样的。XML默认每次1%,动态设置的大于1%。