SeekBar高度一般时wrap_content,进度条和thumb(拖动的滑块)设置的图片,在用shape写的drawable中,设置height,来设置控件的高度。
android:layout_height="wrap_content"
android:progressDrawable="@drawable/layer_progress_bar" // 滑动条
android:thumb="@drawable/shape_progress_thumb" // 滑块
下面时progress的图片:
注意:必须保持backgroud、secondaryProgress、progress的顺序;backgroud没有,secondaryProgress、progress必须有标签。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 必须保持backgroud、secondaryProgress、progress的顺序 -->
<item
android:id="@android:id/background"
android:height="@dimen/exple_progress_bar_height"
android:gravity="center_vertical">
<shape>
<solid android:color="#4466ccff" />
<corners android:radius="1dip" />
</shape>
</item>
<item
android:id="@android:id/secondaryProgress"
android:height="@dimen/exple_progress_bar_height"
android:gravity="center_vertical">
<clip>
<shape>
<solid android:color="#9966ccff" />
<corners android:radius="1dip" />
</shape>
</clip>
</item>
<item
android:id="@android:id/progress"
android:height="@dimen/exple_progress_bar_height"
android:gravity="center_vertical">
<clip>
<shape>
<solid android:color="#66ccff" />
<corners android:radius="1dip" />
</shape>
</clip>
</item>
</layer-list>
拖动滑块时,滑块外会有阴影(如下图),像去掉的话android:background="@null"
SeekBar有内置的padding,进度条的左右两端达不到View的边界,如果想达到边界的话,设置paddingStart(paddingLeft不一定有效)
滑块看起来像是截断了滑动条,或者说遮住了滑动条,如下图:(我一般设置滑块高度时滑动条的2倍,这里为了让截断看的明显,特意设置为等高)。想不截断的话android:splitTrack="false"。
滑块的中心标识着进度,当滑块滑倒最左时,滑块的左半部分会在滑动条外。如果进度条宽度与View等宽,滑块左半是截断的,无法显示,影响视觉效果。可以通过设置左右padding,来使滑块完全显示。但UI设计时,进度条与上面的控件视觉上等宽,考虑到padding和截断的情况,需要让View的宽度大于上面的控件,多余的部分用于设置padding,来达到视觉上的等宽。
部分UI设计师会让开始和结束时,滑块不可见。通过thumbOffset属性,让thumb可以在进度条之外(但还是在View之内,这是需要设置较大的paading)。