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获得的新评级值。