简体   繁体   English

如何将评级栏设置为最低一颗星?

[英]How to set rating bar to minimum one star?

I have a requirement to rate for a user with minimum of one star and after that ratings should increase to 0.5.我有一个要求给一个用户评分最少一颗星,然后评分应该增加到 0.5。 But my question is that the user should not change the minimum rating of star to 0.5 or 0. 1 should be the default rating.但我的问题是,用户不应将星级的最低评分更改为 0.5 或 0。默认评分应为 1。 Please help with this and awaiting for your earlier response.请帮助解决这个问题并等待您的早期回复。 I also tried implementing by listeners from the link but completely struct with the logic inside My code is:我也尝试通过链接中的侦听器实现,但完全使用我的代码中的逻辑进行构造:

ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {

    @Override public void onRatingChanged(RatingBar ratingBar, float rating, 
      boolean fromUser) {

    }
});
 ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {

@Override public void onRatingChanged(RatingBar ratingBar, float rating, 
  boolean fromUser) {
     if(rating<1.0f)
          ratingBar.setRating(1.0f);
}
});

如果ur的值为String,则设置Rating为float值:

ratingBar.setRating(Float.parseFloat(result));
      ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {

        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating,
                boolean fromUser) {

                  ratingBar.setRating(Float.parseFloat(""+Math.ceil(rating)));
                }
 }
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
    public void onRatingChanged(RatingBar ratingBar, float rating,
                                boolean fromUser) {
            Toast.makeText(RateUsProductActivity.this,"Rating :-  "+String.valueOf(rating),Toast.LENGTH_SHORT).show();
        if(rating<1.0f)
            ratingBar.setRating(1.0f);
    }
});

When Rating is less than 1 then automatically set Rating 1 当评分小于1时,会自动设置评分1

Happy Coding Cheers! 祝您编码愉快!

Setting OnRatingBarChangeListener will work, but the problem with this solution is that if you try to drag rating below 1 star, it will show zero stars for a second, and only then will jump back to desirable 1 star.设置 OnRatingBarChangeListener 会起作用,但此解决方案的问题是,如果您尝试将评级拖到 1 星以下,它将显示零星一秒钟,然后才会跳回理想的 1 星。 To avoid this "flickering" behavior I sugest to inherit RatingBar and override method getMin .为了避免这种“闪烁”行为,我建议继承RatingBar并覆盖方法getMin For example:例如:

class MinStarRatingBar @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : AppCompatRatingBar(context, attrs, defStyleAttr) {

    private var minStars = 0

    fun setMinimumStars(minStars: Int) {
        this.minStars = minStars
    }

    override fun getMin(): Int {
        return minStars
    }
}

And then just use ratingBar.setMinimumStars(/*your value*/)然后只需使用ratingBar.setMinimumStars(/*your value*/)

NOTE : I don't know why, but setMin method just isn't working.注意:我不知道为什么,但是setMin方法不起作用。 It requires minimum Api 26 to run, and changes the change step in Ratinbar and does not affect min value of stars for some reason.它至少需要 Api 26 才能运行,并且更改了 Ratinbar 中的更改步骤,并且由于某种原因不影响星星的最小值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM