SeekBar次级进度(Secondary progress)不可见及被主进度覆盖问题求助
解决SeekBar次级进度不可见的问题
我来帮你搞定这个SeekBar次级进度显示的问题~ 下面给你详细说明原因和解决方案:
核心问题原因
Android的SeekBar在自定义进度drawable时有个默认逻辑:如果你的layer-list里没有明确指定@android:id/progress对应的item,系统会自动把第一个item认定为主进度的绘制对象。这就导致你删除主进度代码段后,原本定义为次级进度的@android:id/secondaryProgress被错误当成主进度渲染,出现“次级进度被覆盖为主进度”的情况。
解决方案:自定义Drawable实现仅显示主进度
要实现只显示主进度、次级进度完全不可见,你需要在seekbar_progress.xml中同时定义主进度和次级进度的item,把次级进度的颜色设为透明即可:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 主进度:按照你的需求设置样式 --> <item android:id="@android:id/progress"> <clip> <shape android:shape="line"> <stroke android:width="3dp" android:color="@color/color_status_bar" /> </shape> </clip> </item> <!-- 次级进度:设置为透明,使其完全不可见 --> <item android:id="@android:id/secondaryProgress"> <clip> <shape android:shape="line"> <stroke android:width="3dp" android:color="@android:color/transparent" /> </shape> </clip> </item> </layer-list>
另一种简化方案(适合完全不用次级进度的场景)
如果你根本不需要用到次级进度的功能,除了上面的drawable方式,还可以直接把次级进度的值设为0:
- 在XML布局中设置:
<SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:progressDrawable="@drawable/seekbar_progress" android:secondaryProgress="0" />
- 或者在代码中动态设置:
seekBar.setSecondaryProgress(0);
不过这种方式不如自定义drawable彻底,要是后续不小心修改了次级进度的值,它还是会显示出来,所以更推荐第一种drawable方案哦~
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

