SeekBar是一种特殊的进度条,其与ProgressBar的区别在于,SeekBar支持用户手动调整进度,可以实现进度条的个性化设置。
监控SeekBar的进度变化的实现方法如下:
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
...//fromUser参数标识变化是否来自用户
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
...//开始触摸手势
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
...//结束触摸手势
}
});
在默认情况下,SeekBar的最大值为100,通过setMax()方法可以设置SeekBar的最大值。设置SeekBar的进度的方法如下:
public synchronized void setProgress(int progress)
public synchronized void setSecondaryProgress(int secondaryProgress)
我们可以通过android:progressDrawable属性来设置进度条背景;android:thumb属性来设置拖动块的样式。由于Seekbar继承自ProgressBar,所以它还具有ProgressBar的各种属性设置。
其系统样式如下图所示:
实现其可自动运行的布局及代码如下:
activity_seekbar_layout.xml布局:
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<SeekBar
android:id="@+id/seekbar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="30dp"
android:max="100" />
</LinearLayout>
</span></span></span>
SeekBarActivity.java代码:
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">package com.sc.android.ui.bar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import com.sc.android.R;
public class SeekBarActivity extends Activity {
private SeekBar mSeekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seekbar_layout);
mSeekBar = (SeekBar) findViewById(R.id.seekbar1);
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
mSeekBar.incrementProgressBy(i);
}
}
}).start();
}
}
</span></span></span>
RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互。
当使用可以支持用户交互的RatingBar时,无论将控件(widgets)放在它的左边还是右边都是不合适的。
只有当布局的宽被设置为wrap content时,设置的星星数量(通过函数setNumStars(int)或者在XML的布局文件中定义)将显示出来(如果设置为另一种布局宽的话,后果无法预知)。
次级进度一般不应该被修改,因为他仅仅是被当作星型部分内部的填充背景。
布局文件中定义控件以及属性,这里主要需要指定的是总星星数量,和当前的值,也就是总级别跟当前级别的量。
通过style="?android:attr/ "属性来设置星星的大小当/ 后面为ratingBarStyleSmall是小的,ratingBarStyleIndicator为中等的,默认的是大的;ratingBarStyleIndicator属性是设置星星个数;android:rating属性设置当前评分值。
以下用一个简单的布局来实现的效果:
其xml布局如下:
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RatingBar
android:id="@+id/ratingbar1"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="4"
android:rating="0.5" />
<RatingBar
android:id="@+id/ratingbar2"
style="?android:attr/ratingBarStyleIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:rating="1" />
<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="6"
android:rating="1.5" />
</LinearLayout></span></span></span>
搜索
复制