Android 评级栏仅显示满星,而不是半星

问题描述 投票:0回答:3

我在 Android 应用程序中使用评级栏。但它只显示满星,而我也想要半星。

我插入了一个带有名称和 ratingValue 的 SQLite 行,其中 ratingValue 为“3.5”,但我的应用程序将其变为“4”。即使我的StepSize是“0.5”,连默认值都改为“3”

编辑: 如果您单击列表行,它会弹出另一个评级栏,您可以对其进行“评级”,如果您单击按钮,它会将评级值发送到数据库中。列表项评级栏仅用于显示“平均”评级,但这就是它出错的地方,它将值向上舍入

编辑2: 将步长设置为 0.1,现在奇怪的是,只有中间的星星接受浮点数...... 剩下的星星还只是满的 如果我将评级设置为 1.2,则只有第二颗星接受浮点值,第一个星接受 0.2 等,但其他星(不在该范围内)仅或满或空

这是一些代码

ListItem_layout

<TableRow>    
    <RatingBar
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/sportsRatingBar"
        android:gravity="center_horizontal"
        android:focusableInTouchMode="false"
        android:isIndicator="true"
        android:clickable="false"
        android:focusable="false"
        android:layout_column="1"
        android:rating="1.1"
        android:stepSize="0.1" />

列表项目

if(ratingBar!=null) {
                ratingBar.setRating(p.getRating());
                ratingBar.setTag(p.getId());
            }

可重用类

public float getRating() { return Rating; }

用于评级的 SQLite 表列

 COLUMN_RATING + " real not null);"

最后,从数据库获取

c.getFloat(COLUMN_RATING_COL));

一些图片来解释

android ratingbar
3个回答
11
投票

我认为你不需要任何库,我只是尝试了一下,它工作了。

<android.support.v7.widget.AppCompatRatingBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="?android:attr/ratingBarStyle"
    android:background="@android:color/holo_red_dark"
    android:id="@+id/ratingBar1"
    android:stepSize="0.1"
    android:rating="2.5"/>

我将开始值设置为 4.5,它就是这样工作的。

RatingBar ratingBar = (RatingBar) findViewById(R.id.coloredRatingBar1);
    ratingBar.setRating(4.8f);
    ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            Log.i(TAG, "onRatingChanged: rating : "+rating);
        }
    });

2
投票

首先,评级小部件的定义方式无法接受值。 Clickable 设置为 false,isIndicator 设置为 true。要接受输入,请按以下方式定义小部件

<RatingBar
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/sportsRatingBar"
        android:gravity="center_horizontal"
        android:rating="2.5"
        android:stepSize="0.5" />

为了获取值,不确定如何设置变量评级

查看图像,了解小部件的外观 like


0
投票

我也有同样的问题。这是因为在 XML 中你有

android:isIndicator="true"

如果删除标签,问题就解决了。但显然您不希望用户能够更改评级。为了避免这种情况,你可以在代码中设置它

MaterialRatingBar ratingBar=view.findViewById(R.id.ratingBar);
ratingBar.setIsIndicator(true);
ratingBar.setRating((float)myFloatValue);
© www.soinside.com 2019 - 2024. All rights reserved.