Android RatingBar使用Kotlin
在本教程中,我们将使用Kotlin在Android应用程序中讨论和实现RatingBar。
什么是Android RatingBar?
Android RatingBar是SeekBar的扩展。
SeekBar是ProgressBar的扩展。
评级列用于创建审阅/评级UI,用户可以在该UI上拖动鼠标,除非没有明确的拇指图标。
等级列状态
RatingBar具有三种状态:完全,空和部分状态。
等级列的等级是浮点值。
等级列XML属性
等级列的重要XML属性是:
android:numStars-您希望在屏幕上显示的星级评分。
如果将RatingBar宽度设置为与父项匹配,则该属性将被忽略,并且星数为10。android:rating-这是一个浮点数。
这里的值充满了那么多星星。android:stepSize-每个星星的大小。
默认情况下,该值为0.5。
将其设置为1不能再部分填充星星。
此属性应介于0和1之间。android:progressTint-填充的星星的颜色。
android:progressBackgroundTint-未填充的星星的颜色。
android:secondaryProgressTint-此处传递的颜色会在部分填充的星星上添加边框。
android:isIndicator-将其设置为true表示RatingBar仅用于显示。
您无法填写评分。android:progressDrawable-我们在此处传递自定义星星的drawable。
style-用于在RatingBar上设置自定义/内置样式。
除了默认的样式外,还有另外两个:Small,Indicator。
我们也可以创建自己的自定义样式。
Kotlin代码创建评分列
实现了OnRatingBarChangeListener接口,并且必须重写以下Kotlin函数。
override fun onRatingChanged(p0: RatingBar?, p1: Float, p2: Boolean)
如果用户更改了评分,则布尔值为true。
等级列XML示例
让我们看看使用XML代码的不同类型的RatingBar。
1.简单的评分列
<RatingBar
android:id="@+id/ratingBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:rating="1"
android:stepSize="1"
2.带有背景和二次进度色调的评分列
<RatingBar
android:id="@+id/ratingBar3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:numStars="3"
android:secondaryProgressTint="@android:color/white"
android:stepSize="0.2"
3.具有进度和二级进度色调的RatingBar
<RatingBar
android:id="@+id/ratingBar4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:progressBackgroundTint="@android:color/black"
android:progressTint="@android:color/holo_green_dark"
android:rating="1"
android:stepSize="0.5"
<RatingBar
android:id="@+id/ratingBar5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:progressBackgroundTint="@android:color/white"
android:progressTint="@android:color/holo_green_dark"
android:rating="2.5"
android:secondaryProgressTint="@color/colorPrimaryDark"
android:stepSize="0.5"
默认情况下,辅助进度色是在styles.xml中设置的" colorAccent"。
4.评级列小样式
<RatingBar
android:id="@+id/ratingBar7"
style="@android:style/Widget.Material.RatingBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:isIndicator="false"
android:numStars="5"
android:rating="1"
android:stepSize="0.5"
5.自定义评分列
Android RatingBar Kotlin项目结构
1. XML布局代码
下面给出了布局activity_main.xml的代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="32sp"
<RatingBar
android:id="@+id/ratingBar1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:rating="1"
android:stepSize="1"
<RatingBar
android:id="@+id/ratingBar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numStars="5"
<RatingBar
android:id="@+id/ratingBar3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:numStars="3"
android:rating="0.4"
android:secondaryProgressTint="@android:color/white"
android:stepSize="0.2"
<RatingBar
android:id="@+id/ratingBar4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:progressBackgroundTint="@android:color/black"
android:progressTint="@android:color/holo_green_dark"
android:rating="1"
android:stepSize="0.5"
<RatingBar
android:id="@+id/ratingBar5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:progressBackgroundTint="@android:color/white"
android:progressTint="@android:color/holo_green_dark"
android:rating="2.5"
android:secondaryProgressTint="@color/colorPrimaryDark"
android:stepSize="0.5"
<RatingBar
android:id="@+id/ratingBar6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="true"
android:numStars="5"
android:rating="0.7"
android:stepSize="0.7"
<RatingBar
android:id="@+id/ratingBar7"
style="@android:style/Widget.Material.RatingBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:isIndicator="false"
android:numStars="5"
android:rating="1"
android:stepSize="0.5"
<RatingBar
android:id="@+id/ratingBar8"
style="@style/CustomRatingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:numStars="5"
android:progressBackgroundTint="@android:color/holo_orange_dark"
<RatingBar
android:id="@+id/ratingBar9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:numStars="5"
android:progressBackgroundTint="@android:color/black"
android:progressDrawable="@drawable/ic_action_happy"
android:progressTint="@color/colorPrimary"
android:rating="1"
</LinearLayout>
自定义RatingBar需要在styles.xml中设置progressDrawable及其其他属性,否则它将无法正常工作。
最后的RatingBar在以上布局中不起作用。
在styles.xml文件中添加以下代码。
<style name="CustomRatingBar" parent="Widget.AppCompat.RatingBar">
<item name="android:progressDrawable">@drawable/custom_ratingbar</item>
<item name="colorControlNormal">#f57c00</item>
<item name="colorControlActivated">#c51162</item>
</style>
我们还创建了一个custom_ratingbar.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">
<bitmap
android:src="@drawable/ic_action_happy"
android:tint="?attr/colorControlNormal"
</item>
<item android:id="@android:id/secondaryProgress">
<bitmap
android:src="@drawable/ic_action_happy"
android:tint="?attr/colorControlHighlight"
</item>
<item android:id="@android:id/progress">
<bitmap
android:src="@drawable/ic_action_happy"
android:tint="?attr/colorControlActivated"
</item>
</layer-list>
注意:在位图android:src上,您无法设置可绘制的矢量图像。
在本教程的结尾,您可以找到带有项目源代码的自定义星星的图像资产。
2. Kotlin活动代码
MainActivity.kt文件的代码如下。
package net.androidly.androidlyratingbar
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.RatingBar
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity(), RatingBar.OnRatingBarChangeListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ratingBar1.onRatingBarChangeListener = this
ratingBar2.onRatingBarChangeListener = this
ratingBar3.onRatingBarChangeListener = this
ratingBar4.onRatingBarChangeListener = this
ratingBar5.onRatingBarChangeListener = this
ratingBar6.onRatingBarChangeListener = this
ratingBar7.onRatingBarChangeListener = this
ratingBar8.onRatingBarChangeListener = this
ratingBar9.onRatingBarChangeListener = this
}
override fun onRatingChanged(p0: RatingBar?, p1: Float, p2: Boolean) {
textView.text = "$p1"
}
}

