有这样一个需求,用RelativeLayout实现在同一行显示两个一个ProgressBar,一个TextView,TextView显示的长度是固定的,而ProgressBar则需要自适应不同屏幕大小的手机,这个时候怎么实现呢?实现代码如下
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ProgressBar android:id="@+id/kill_cloud_progress1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:progress="50"
android:progressDrawable="@drawable/progressbar"
android:layout_marginRight="100dip"/>
<TextView android:text="已扫描 16%" android:layout_width="wrap_content"
android:layout_height="20.0dip"
android:layout_toRightOf="@id/kill_cloud_progress1"
android:layout_marginLeft="-100dip"
android:textColor="#0000ff" android:textSize="15sp" android:gravity="center"
android:id="@+id/scanCount1" />
</RelativeLayout>
这里主要的布局属性是ProgressBar 的android:layout_width="match_parent" android:layout_marginRight="100dip"
TextView的 android:layout_toRightOf="@id/kill_cloud_progress1"
android:layout_marginLeft="-100dip"
顺便对于ProgressBar的自定义实现如下,/res/drawable/progressbar.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 设置背景色图像资源 -->
<item android:id="@android:id/background" android:drawable="@drawable/processbg"/>
<!-- 设置第二级进度条颜色图像资源 -->
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/processblue" />
<!-- 设置第一级进度条颜色图像资源 -->
<item android:id="@android:id/progress" android:drawable="@drawable/processblue" />
</layer-list>
id为background的item:系统画的是一个圆角为5dip的长条图,最底层的一个背景
id为secondaryProgress的item:系统画的是一个圆角为5dip的长条图,第二层的背景图,用了clip,可以根据进度来切。就像视频里已经下载完的那部分进度图。
id为progress的item:系统画的是一个圆角为5dip的长条图,最顶层的黄色的背景图,用了一个。可以根据设置的进度来切。就像视频里已经播放到的那部分进度图。
如果要自定义progressBar的样式,只需自定义系统的这个XML,然后:
mProgressBar.setProgressDrawable(progressStyle);
mProgressbar是progressBar,progressStyel是Drawable,也就是自定义的progress的样式。