项目需求定义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应该没什么问题了。
本站由以下主机服务商提供服务支持:
0条评论