我在 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.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);
}
});
首先,评级小部件的定义方式无法接受值。 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" />
为了获取值,不确定如何设置变量评级
我也有同样的问题。这是因为在 XML 中你有
android:isIndicator="true"
如果删除标签,问题就解决了。但显然您不希望用户能够更改评级。为了避免这种情况,你可以在代码中设置它
MaterialRatingBar ratingBar=view.findViewById(R.id.ratingBar);
ratingBar.setIsIndicator(true);
ratingBar.setRating((float)myFloatValue);