Android RatingBar实现五星好评

属性

isIndicatorRatingBar   是否为指示器,为true时,用户将无法交互操作,默认为false。

numStars                      显示的星型数量,必须是一个整形值,像“50”,虽然可以设置很大,但一般都是5-10个星星即可。

rating                            设置默认的评分。

stepSize                        评分每次增加的值。建议大于0小于等于1之间最合适。

样式

其中内置了三个样式:

style="?attr/ratingBarStyle":默认样式

style="?android:attr/ratingBarStyleSmall":小样式

style="?android:attr/ratingBarStyleIndicator":指示器样式

 dialog弹框显示好评操作效果图

 

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/x582"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_while_radius_10dp_style"
    android:minHeight="@dimen/y280"
    android:orientation="vertical"
    android:padding="@dimen/dp_20">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:padding="@dimen/dp_6"
        android:text="@string/司机评分"
        android:textColor="@color/color_333333"
        android:textSize="@dimen/sp_16"
        android:textStyle="bold" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="@dimen/dp_6">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="@string/事故" />


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/dp_30"
            android:layout_marginEnd="@dimen/dp_30"
            android:layout_weight="1"
            android:background="@drawable/shape_color_remakes_label_style"
            android:gravity="center_horizontal">

            <RatingBar
                android:id="@+id/mRtbAccident"
                style="?android:attr/ratingBarStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:isIndicator="false"
                android:numStars="5"
                android:paddingTop="@dimen/dp_2"
                android:paddingBottom="@dimen/dp_2"
                android:stepSize="1"
                android:theme="@style/RatingBar" />

        </LinearLayout>


    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="@dimen/dp_6">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="@string/违章" />


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/dp_30"
            android:layout_marginEnd="@dimen/dp_30"
            android:layout_weight="1"
            android:background="@drawable/shape_color_remakes_label_style"
            android:gravity="center_horizontal">

            <RatingBar
                android:id="@+id/mRtbRegulations"
                style="?android:attr/ratingBarStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:isIndicator="false"
                android:numStars="5"
                android:paddingTop="@dimen/dp_2"
                android:paddingBottom="@dimen/dp_2"
                android:stepSize="1"
                android:theme="@style/RatingBar" />
        </LinearLayout>


    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="@dimen/dp_6">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="@string/违纪" />


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="@dimen/dp_30"
            android:layout_marginEnd="@dimen/dp_30"
            android:layout_weight="1"
            android:background="@drawable/shape_color_remakes_label_style"
            android:gravity="center_horizontal">

            <RatingBar
                android:id="@+id/mRtbDiscipline"
                style="?android:attr/ratingBarStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:isIndicator="false"
                android:numStars="5"
                android:paddingTop="@dimen/dp_2"
                android:paddingBottom="@dimen/dp_2"
                android:stepSize="1"
                android:theme="@style/RatingBar" />
        </LinearLayout>


    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="@dimen/dp_6"
        android:text="@string/评分备注" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/dp_10"
        android:layout_marginRight="@dimen/dp_10"
        android:background="@drawable/shape_color_remakes_label_style"
        android:minHeight="@dimen/dp_60"
        android:padding="@dimen/dp_6">

        <EditText
            android:id="@+id/mEtRemarks"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:gravity="top|left"
            android:hint="@string/这是评分备注"
            android:inputType="textMultiLine"
            android:maxLines="5"
            android:minLines="3"
            android:textSize="@dimen/sp_13" />


    </RelativeLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="@dimen/dp_6"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal"
        android:padding="@dimen/dp_5">

        <TextView
            android:id="@+id/mTvCancelDialog"
            android:layout_width="@dimen/x150"
            android:layout_height="@dimen/y64"
            android:layout_marginRight="@dimen/x30"
            android:background="@drawable/shape_247eff_30_stroke_style"
            android:gravity="center"
            android:text="取消"
            android:textColor="@color/color_247EFF"
            android:textSize="@dimen/sp_14"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/mTvConfirmDialog"
            android:layout_width="@dimen/x150"
            android:layout_height="@dimen/y64"
            android:layout_marginLeft="@dimen/x30"
            android:background="@drawable/shape_247eff_radius_30dp_style"
            android:gravity="center"
            android:text="确认"
            android:textColor="@color/color_FFFFFF"
            android:textSize="@dimen/sp_14"
            android:textStyle="bold" />

    </LinearLayout>

</LinearLayout>

drawable ---->  shape_while_radius_10dp_style.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/color_FFFFFF" />
    <corners android:radius="@dimen/x20" />
</shape>

drawable -----> shape_color_remakes_label_style.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="@color/color_FAFAFA"/>
    <corners android:radius="@dimen/dp_5"/>

    <stroke android:color="@color/color_F3F3F3"
        android:width="@dimen/dp_1"/>
    <corners android:radius="@dimen/dp_5"/>

</shape>

values ------> styles.xml

  RatingBar颜色:

    <!--RatingBar颜色-->
    <style name="RatingBar" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/color_CCCCCC</item>
        <item name="colorControlActivated">@color/color_FF7070</item>
    </style>

 Dialog主题:

    <style name="CenterDialogTheme" parent="@android:style/Theme.Dialog">
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 模糊 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 遮罩层 -->
        <item name="android:backgroundDimAmount">0.5</item>
    </style>

drawable -----> shape_247eff_30_stroke_style.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="@dimen/x50"/>
    <stroke android:color="@color/color_247EFF" android:width="@dimen/x2"/>


</shape>

drawable -----> shape_247eff_radius_30dp_style.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- rectangle表示为矩形 -->

    <!-- 填充的颜色 -->
    <solid android:color="@color/color_247EFF" />

    <!-- android:radius 圆角的半径 -->
    <corners android:radius="30dp" />


</shape>
CenterDialogView:
public class CenterDialogView {


    private static CenterDialogView mInstance;
    private Context mContext;
    private Dialog mDialog;
    private static final String TAG = "CenterDialogViewTag";
    private long exitTime = 0;


    private CenterDialogView(Context context) {
        this.mContext = context;
        createDialog(context);
    }

    private void createDialog(Context context) {
        //1、使用Dialog、设置style
        mDialog = new Dialog(context, R.style.CenterDialogTheme);
        mDialog.setCancelable(true);

        //设置setCancelable为false之后,物理返回按键不能取消弹框。需要设置该监听,以达到按返回键取消弹框的目的
        mDialog.setOnKeyListener((dialog, keyCode, event) -> {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                if ((System.currentTimeMillis() - exitTime) > 2000) {
                    exitTime = System.currentTimeMillis();
                } else {
                    mDialog.cancel();
                }
                return true;
            }

            return false;
        });
        
    }

    public static CenterDialogView getInstance(Context context) {
         
        if (mInstance == null) {
            synchronized (CenterDialogView.class) {
                if (mInstance == null) {
                    mInstance = new CenterDialogView(context);
                }
            }
        }
        return mInstance;
    }


    public Dialog loadDialogView(View view, float widthPx, float heightPx) {

        //2、设置布局
        mDialog.setContentView(view);

        Window window = mDialog.getWindow();

        //设置对话框大小
        window.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        WindowManager.LayoutParams layoutParams = mDialog.getWindow().getAttributes();
        layoutParams.width = (int) widthPx;
        layoutParams.height = (int) heightPx;
        if (heightPx == 0) {
            layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
        }

        mDialog.getWindow().setAttributes(layoutParams);
        //设置弹出位置
        window.setGravity(Gravity.CENTER);
        return mDialog;

    }

    public void showDialog() {
        if (!mDialog.isShowing()) {
            mDialog.show();
        }
    }


    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     *
     * @param dpValue 尺寸dip
     * @return 像素值
     */
    private int dp2px(float dpValue) {
        final float scale = mContext.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    public void cancelDialog() {
        if (mDialog != null) {
            mDialog.cancel();
        }
    }


    /**
     * 评论弹框
     *
     * @return
     */
    public View CommentDriverDialog(OnCommentDriverListener onCommentDriverListener) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.comment_task_dialog, null, false);

        RatingBar mRtbAccident = view.findViewById(R.id.mRtbAccident);
        RatingBar mRtbRegulations = view.findViewById(R.id.mRtbRegulations);
        RatingBar mRtbDiscipline = view.findViewById(R.id.mRtbDiscipline);
        EditText mEtRemarks = view.findViewById(R.id.mEtRemarks);
        TextView mTvCancelDialog = view.findViewById(R.id.mTvCancelDialog);
        TextView mTvConfirmDialog = view.findViewById(R.id.mTvConfirmDialog);
        mRtbAccident.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
                Log.i("onRatingChangedTAG", "rating: " + rating + ", fromUser:" + fromUser);
            }
        });
        view.findViewById(R.id.mTvCancelDialog).setOnClickListener(v -> {
            if (mDialog != null) mDialog.cancel();
        });
        view.findViewById(R.id.mTvConfirmDialog).setOnClickListener(v -> {
            if (onCommentDriverListener != null) onCommentDriverListener.onClick();
        });

        return view;
    }

    public interface OnCommentDriverListener {
        void onClick();
    }


    public void destroyView() {
        Log.d(TAG, "destroyView: ");
        if (mDialog != null) {
            mDialog.cancel();
            mDialog = null;
        }
        if (mInstance != null) {
            mInstance = null;
        }
    }

}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/209746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java开发实战(一):Java环境安装

工欲善其事&#xff0c;必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前&#xff0c;我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置&#xff0c;我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环…

有文件实体的后门无文件实体的后门rootkit后门

有文件实体后门和无文件实体后门&RootKit后门 什么是有文件的实体后门&#xff1a; 在传统的webshell当中&#xff0c;后门代码都是可以精确定位到某一个文件上去的&#xff0c;你可以rm删除它&#xff0c;可以鼠标右键操作它&#xff0c;它是有一个文件实体对象存在的。…

Softmax与交叉熵:理解神经网络中的重要组成部分

在深度学习中&#xff0c;神经网络是一种广泛应用的模型&#xff0c;用于解决许多复杂的问题&#xff0c;如图像分类、语音识别和自然语言处理等。Softmax函数和交叉熵损失函数是神经网络中的重要组成部分&#xff0c;本文将重点介绍和解释Softmax与交叉熵的概念、用途以及它们…

SCA技术进阶系列(四):DSDX SBOM供应链安全应用实践

一、SBOM的发展趋势 数字时代&#xff0c;软件已经成为维持生产生活正常运行的必备要素之一。随着容器、中间件、微服务、 DevOps等技术理念的演进&#xff0c;软件行业快速发展&#xff0c;但同时带来软件设计开发复杂度不断提升&#xff0c;软件供应链愈发复杂&#xff0c;软…

快照读通过MVCC解决不可重复读当前读通过间隙锁解决幻读

简介 Multi-Version Concurrency Control 多版本并发控制&#xff0c;MVCC 是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff1b;在编程语言中实现事务内存。 *往期知识不做重点 事务具有4个特征,分别是原子性、一致性、隔…

中通单号查询,中通快递物流查询,将途经指定城市的单号筛选出来

批量查询中通快递单号的物流信息&#xff0c;将途经指定城市的单号筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左…

centos7 yum安装jdk1.8

1.列出可安装版本 yum -y list java* 2.安装 yum -y install java-1.8.0-openjdk* 3.检查命令 java -version javac java

YOLOv8如何输出COCO指标

1、先正常python train 一个模型 yolo taskdetect modetrain model/home//v8/v8-ori-x/yolov8x.pt data/home/v8/v8-ori-x/ultralytics/cfg/datasets/111.yaml epochs300 batch16 device62、再正常python val --各种参数 --save_jsonTrue&#xff0c;这一步的作用是要生成自己…

电梯安全远程监控系统的主要作用和意义

电梯是现代城市生活中必不可少的交通工具&#xff0c;为了保证其安全可靠的运行&#xff0c;电梯运行监测系统应运而生。本文将介绍电梯安全远程监控的工作原理、重要性 一、电梯安全远程监控系统的作用   ◆实时监控和故障预警&#xff1a;电梯安全远程监控系统可以实时监测…

vector是如何扩容的

vector容器扩容 vector是成倍扩容的&#xff0c;一般是2倍。 vector管理内存的成员函数 开始填值 没有填值之前&#xff0c;vector元素个数和容量大小都为0 加入一个值之后&#xff1a; 加入两个值&#xff1a;重点在加入三个值&#xff0c;此时容量变为4&#xff1a;加入第…

大数据技术之Oozie

大数据技术之Oozie 第1章 Oozie简介 Oozie英文翻译为&#xff1a;驯象人。一个基于工作流引擎的开源框架&#xff0c;由Cloudera公司贡献给Apache&#xff0c;提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。主要用于定时调度任…

51单片机的智能加湿器控制系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DHT11湿度传感器模块继电器等模块构成。主要适用于智能自动加湿器、湿度保持、湿度控制等相似项目。 可实现基本功能: 1、LCD1602液晶屏实时显示湿度信息 2、DHT11采集湿度 3、按键可以调节适宜人体湿度的阈值范围&#xff0…

Java核心知识点整理大全26-笔记

目录 27. Storm 7.1.1. 概念 27.1.1. 集群架构 27.1.1.1. Nimbus&#xff08;master-代码分发给 Supervisor&#xff09; 27.1.1.2. Supervisor&#xff08;slave-管理 Worker 进程的启动和终止&#xff09; 27.1.1.3. Worker&#xff08;具体处理组件逻辑的进程&#xff…

Linux 系统是如何收发网络包的?(计算机网络)

一、Linux 网络协议栈 如下是TCP/IP四层网络模型&#xff0c;实际上Linux 网络协议栈与它相似 下图是Linux 网络协议栈 二、Linux 接收网络包的流程 1.网卡是计算机里的一个硬件&#xff0c;专门负责接收和发送网络包&#xff0c;当网卡接收到一个网络包后&#xff0c;会通过…

内存免杀--

通过分析Ekko项目了解内存加密过程&#xff0c;这对对抗内存扫描来说很重要。 概述 Edr会扫描程序的内存空间&#xff0c;检测是否存在恶意软件&#xff0c;这种检测恶意软件的方式&#xff0c;应该和静态检测没什么区别&#xff0c;只不过一个扫描的对象是硬盘&#xff0c;一…

【工作生活】汽车ECU开发内容简介

目录 1. 目标 2. 要分享什么 3.1 行业知识 3.1.1车载行业知识&#xff1a; 3.1.2项目&#xff1a; 3.1.3开发测试工具&#xff1a; 3.2 硬件平台 3.3 基础知识 3.4 工作生活 3. 我们是谁 1. 目标 随着新能源汽车的快速崛起&#xff0c;汽车电子行业开始快速发展&…

NSDT场景编辑器实现真数字孪生

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是数字孪生&#xff1f; 数字孪生是资产或系统的实时虚拟模型&#xff0c;它使用来自连…

用c语言自己实现qsort和冒泡排序

目录&#xff1a;1:冒泡排序 2:库函数qsort冒泡排序 3:库函数qsort排序结构体 4:自己实现qsort 1:冒泡排序 冒泡排序&#xff1a;的英文 Bubble Sort &#xff0c;是一种最基础的 交换排序 。 之所以叫做冒泡排序&#xff0c;因为每一个元素都可以像小气泡一样&#xff0c;根…

MSSQL注入

目录 基本的UNION注入&#xff1a; 错误基于的注入&#xff1a; 时间基于的盲注入&#xff1a; 堆叠查询&#xff1a; 理解MSSQL注入是学习网络安全的一部分&#xff0c;前提是您在合法、授权的环境中进行&#xff0c;用于了解如何保护您的应用程序免受此类攻击。以下是有关…

Vue3中props传参(多种数据类型传参方式)

在Vue3中&#xff0c;props接收的type类型有以下几种&#xff1a; 1. String&#xff1a;字符串类型 2. Number&#xff1a;数字类型 3. Boolean&#xff1a;布尔类型 4. Array&#xff1a;数组类型 5. Object&#xff1a;对象类型 6. Date&#xff1a;日期类型 7. Func…