当前位置: 首页 > news >正文

Android入门第19天-Android里的RatingBar的使用

介绍

我们先来看一下什么叫RatingBar长什么样的。

我们很多时候订单评价给5星、打车评价都是用的这个RatingBar。本节我们学的这个RatingBar(星级评分条)其实在使用上是非常简单的,大家在某宝买过东西的对这个应该不陌生,收到卖家的包裹里甚至还会附有一张小纸片:五星好评返还多少元这样。

RatingBar关键属性介绍

RatingBar的4个属性:

  • android:isIndicator,RatingBar的指示是否起作用,默认为false,如果为true,RatingBar的进度不能被人为修改。因此叫isIndicator,它的意思就是“我只显示给你看不要你来改“,所以如果是isIndicator=true的话界面上的星星你是点不动的。
  • android:numStars,显示星星的总数量,必须为整数。
  • android:rating,设置默认评分值,值为浮点数。
  • android:stepSize,评分每次增加的值(最小变化值),值为浮点数。


RatingBar有3种内置样工:

  • 默认样式,即:style="?attr/ratingBarStyle",或者是:androidx.appcompat.widget.AppCompatRatingBar
  • 只读,即:style="?android:attr/ratingBarStyleIndicator"
  • 小样式,即:style="?android:attr/ratingBarStyleSmall"

课程目标

我们这次课程的目标就是同时演示以上3种样式在运行时的效果,同时我们对标准的AppCompatRatingBar添加一个点击事件,使得用户在点击手机屏上的小星星时,在主界面里的一个TextView里联动显示根据用户选择的星星不同时所获得的Rating的值。

先来看我们的UI端界面的代码。

代码

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <RatingBar
        android:id="@+id/defaultRatingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
 
    <RatingBar
        android:id="@+id/smallRatingBar"
        style="?android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:isIndicator="false"
        android:numStars="5"
        android:rating="4"
        android:stepSize="1" />
 
    <RatingBar
        android:id="@+id/indicatorRatingBar"
        style="?android:attr/ratingBarStyleIndicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:isIndicator="true"
        android:numStars="5"
        android:rating="3"
        android:stepSize="1" />
 
    <androidx.appcompat.widget.AppCompatRatingBar
        android:id="@+id/compatRatingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="" />
</LinearLayout>

 

代码导读

  • 这边我们使用了LinearLayout布局,从上到下有5个布局;
  • 第一个就是默认=AppCompatRatingBar;
  • 第三个indicatorRatingBar是“指示性”组件,它可以给你看到有几个星而不能去点和编辑;
  • 最后我们用Text View来显示compatRatingBar在“星星改变”时当前的rate值,这是一个浮点数,因为星星可以是“半”个(如果不想要半个要完整的星星需要自定义,不难但不是我们课程范围,本课程不讲这些“非主流程”的东西);

我们来看后台代码如何联动前台星星在被改变时的事件

MainActivity.java

package org.mk.android.demo.demoratingbar;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.widget.RatingBar;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
    private RatingBar ratingBarCompat;
    private TextView txtDisplayValue;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ratingBarCompat = (RatingBar) findViewById(R.id.compatRatingBar);
        txtDisplayValue=(TextView)findViewById(R.id.textView);
        ratingBarCompat.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
                StringBuffer displayValue=new StringBuffer();
                displayValue.append("rating: ").append(String.valueOf(rating));
                txtDisplayValue.setText(displayValue.toString());
            }
        });
 
    }
}

 关键还在于自己动手去实现一下吧。

相关文章:

  • [会议分享]2022年欧洲计算机科学与信息技术会议(ECCSIT 2022)
  • Python --- 面向对象
  • C语言经典题目之汉诺塔问题超详解(4000字数只为能让你听懂这个题目)
  • 信号线上串接电阻的作用
  • OpenFeign的实现原理(附Feign和OpenFeign的区别)
  • 不同性质生物素叠氮试剂Biotin-azide,Biotin-PEG2/PEG3/PEG4-azide特点分享
  • 【Linux】信号
  • 网络协议:透彻解析HTTPS协议
  • 编译 mesa
  • 健身房信息管理系统(PHP+Html+MySQL)
  • 什么是蜂窝移动网络?
  • 全志V853 NPU 系统介绍
  • Jupyter Notebook 换个主题清爽了很多
  • 【C++】红黑树
  • 提升C内功--函数栈帧的创建和销毁(动画讲解)
  • Angular 响应式表单 基础例子
  • Brief introduction of how to 'Call, Apply and Bind'
  • CentOS7简单部署NFS
  • co.js - 让异步代码同步化
  • Git同步原始仓库到Fork仓库中
  • HTTP--网络协议分层,http历史(二)
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • java2019面试题北京
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript对象详解
  • MaxCompute访问TableStore(OTS) 数据
  • Netty源码解析1-Buffer
  • orm2 中文文档 3.1 模型属性
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • vue-cli3搭建项目
  • Vue学习第二天
  • 从0实现一个tiny react(三)生命周期
  • 对象管理器(defineProperty)学习笔记
  • 区块链技术特点之去中心化特性
  • 日剧·日综资源集合(建议收藏)
  • 微信小程序设置上一页数据
  • 我的业余项目总结
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 正则表达式
  • 智能合约开发环境搭建及Hello World合约
  • 追踪解析 FutureTask 源码
  • 选择阿里云数据库HBase版十大理由
  • ![CDATA[ ]] 是什么东东
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (02)Hive SQL编译成MapReduce任务的过程
  • (4)Elastix图像配准:3D图像
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)fock函数详解
  • (转)nsfocus-绿盟科技笔试题目
  • (转)Unity3DUnity3D在android下调试