Android SeekBar和RatingBar示例教程
在本教程中,我们将在我们的android应用程序中实现SeekBar和RatingBar。
在开始实施之前,我们先定义它们并讨论其用法。
Android SeekBar
SeekBar是ProgressBar的扩展,添加了可拖动的滑块。
用户可以触摸拇指并向左或者向右拖动,从而允许用户更改其所连接的组件的值。
它的用途包括设备亮度控制和音量控制。
与ProgressBar类似,它使用android:max和android:progress这两个属性。
SeekBar.OnSeekBarChangeListener接口提供了为SeekBar执行事件处理回调的方法。
这些方法包括:
onProgressChanged(SeekBar seekBar,int progress,boolean fromUser):用于通知SeekBar级别的任何更改。
onStartTrackingTouch(SeekBar seekBar):用于通知用户已开始触摸手势。
onStopTrackingTouch(SeekBar seekBar):用于通知用户已完成触摸手势
Android RatingBar
Android RatingBar用于获取用户的评分。
评级以浮点数形式返回。
以下是" RatingBar"的重要属性。
- android:numStars:在RatingBar中显示的星数
- android:stepSize:评分的步长。
大小为0.5表示可以设置一半的额定值(例如3.5) - android:isIndicator:此等级列是否为指示等级总数的指示器,并且用户无法更改
- style ="?android:attr/ratingBarStyleSmall":创建小指示器RatingBar样式
RatingBar的getRating()方法返回评分编号。
实现了OnRatingBarChangeListener接口,并且需要重写以下方法:
onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser)
在本教程中,我们将显示一个SeekBar以及一个TextView,以在任何给定时间显示SeekBar的相应值,以及一个RatingBar,其等级以吐司显示。
代码
" activity_main.xml"布局包含一个SeekBar,RatingBar和一个TextView,如下面的xml代码所示:
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<SeekBar
android:id="@+id/seekBar"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:max="10"
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/seekBar"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginTop="@dimen/activity_vertical_margin"
<RatingBar android:id="@+id/ratingbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="0.5"
android:layout_centerVertical="true"
android:layout_alignRight="@+id/seekBar"
android:layout_alignEnd="@+id/seekBar"
</RelativeLayout>
MainActivity.java如下:
package com.theitroad.seekbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements RatingBar.OnRatingBarChangeListener {
private SeekBar seekBar;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar = (SeekBar) findViewById(R.id.seekBar);
textView = (TextView) findViewById(R.id.textView);
final RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingbar);
ratingbar.setOnRatingBarChangeListener(this);
//Initialize the textview with '0'
textView.setText(seekBar.getProgress() + "/" + seekBar.getMax());
seekBar.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
int progress = 0;
@Override
public void onProgressChanged(SeekBar seekBar,
int progressValue, boolean fromUser) {
progress = progressValue;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//Display the value in textview
textView.setText(progress + "/" + seekBar.getMax());
}
});
}
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser) {
Toast.makeText(MainActivity.this, "New Rating: " + rating,
Toast.LENGTH_SHORT).show();
}
}
当用户开始拖动SeekBar时,方法onStartTrackingTouch()用于执行任何任务。
在我们的情况下,它是空的。
Toast表示从RatingBar获得的新评级值。

