Android SeekBar和RatingBar示例教程

时间:2020-02-23 14:29:15  来源:igfitidea点击:

在本教程中,我们将在我们的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获得的新评级值。