项目需求定义seekbar,本来以为很简单,但是踩了挺久坑,总结如下:
对于安卓5.1以上的设备,直接定义android:progressDrawable、android:thumb、android:splitTrack即可达到想要的效果。style如下:
<style name="SeekBarStyle" >
<item name="android:splitTrack">false</item>
<item name="android:progressDrawable">@drawable/seekbar_background</item>
<item name="android:thumb">@mipmap/seekbar_thumb</item>
</style>thumb可使用图片(用于带阴影的滑块)然后配合splitTrack达到滑块透明效果,不会遮挡背景。
对于progressDrawable也只需按常规drawable去写即可,没有什么特别的。
例子:seekbar_background.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--定义seekbar滑动条的底色-->
<item android:id="@android:id/background">
<shape>
<corners android:radius="2dp" />
<solid android:color="?color_seekbar_background" />
</shape>
</item>
<!--定义seekbar滑动条进度颜色-->
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="2dp" />
<solid android:color="@color/orange" />
</shape>
</clip>
</item>
</layer-list>但是对于5.1需要做不同处理。【1,无法显示进度条】因为按以上的方式无法显示,主要原因是5.1的android:progressDrawable需要三个层级区分。
例子:seekbar_background_v21.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--定义seekbar滑动条的底色-->
<item android:id="@android:id/background">
<shape>
<corners android:radius="2dp" />
<solid android:color="?color_seekbar_background" />
</shape>
</item>
<!--这个进度一般用不着-->
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<solid android:color="@android:color/transparent" />
</shape>
</clip>
</item>
<!--定义seekbar滑动条进度颜色-->
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="2dp" />
<solid android:color="@color/orange" />
</shape>
</clip>
</item>
</layer-list>然后可以看到背景色了,此外就是滑块的定义,实际上没什么特别的,但如果seekbar限定了高度,【2,滑块无法居中】则需要解决居中问题,解决办法是将高度定义为wrap_content,【3,背景和进度条高度太高】然后会出现背景和进度条太大的问题,这时候使用android:minHeight和android:maxHeight去限制进度条的高度。
在style-v21中定义不同的drawable:
<style name="SeekBarStyle" >
<item name="android:splitTrack">false</item>
<item name="android:progressDrawable">@drawable/seekbar_background_v21</item>
<item name="android:thumb">@mipmap/seekbar_thumb</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:minHeight">4dp</item>
<item name="android:maxHeight">4dp</item>
</style>【4,无法拉满进度条】此外关于滑块无法拉满进度条的问题,主要是下面这个属性的问题
<item name=”android:thumbOffset”>0dp</item>
去除后可正常拉满。
【5,滑块拉满被父view裁剪】关于滑块拉满后被父view裁剪的问题,主要是在父view中加上这两个属性:
android:clipChildren="false"
android:clipToPadding="false"
以上,seekbar应该没什么问题了。
本站广告由 Google AdSense 提供
0条评论