2016-02-22 104 views
2

用于填充十进制评级等级栏的颜色为低于23 API做工精细,并在API 23评级酒吧填充颜色的Android

这里不工作是代码:

RatingBar ratingBar = (RatingBar) view.findViewById(R.id.ratingbar); 
ratingBar.setNumStars(5); 
ratingBar.setMax(5); 
ratingBar.setStepSize(0.1f); 
ratingBar.setRating(0.5); 
Drawable ratingBarColor = ratingBar.getProgressDrawable(); 
DrawableCompat.setTint(ratingBarColor, ContextCompat.getColor(getActivity(), R.color.red)); 

这将用红色填充0.5(半)星的颜色。 但是对于android API 23(MarshMallow)而言,无论您设置了评分,它都会填满所有星星。我可以知道API 23中发生的变化是导致此问题还是让我知道此代码的问题。

听筒用于测试(6.0):HTC一个M8,摩托X播放,纳克斯6. 5.1.1:摩托X(第一代),的Nexus 4,摩托G1,G2

编辑:我测试通过删除API23中的setTint设置白色,并设置十进制等级。因此,可以使用DrawableCompat设置小数星级的颜色。

+0

试过给风格?风格= “机器人:ATTR/ratingBarStyle”? –

+1

@Viren我正在设置自定义评级栏。 –

+0

我没有得到你。你正在创建自定义风格?我告诉你在你放置评级栏的xml中声明它。 –

回答

3

你可以自定义的等级栏

1只让XML文件在你绘制的文件夹并将其命名为rating_bar.xml

<?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:id="@android:id/background" android:drawable="@drawable/rating_empty" /> 
     <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_empty" /> 
     <item android:id="@android:id/progress" android:drawable="@drawable/rating_filled" /> 
    </layer-list> 

2使另一绘制XML文件,并将其命名为rating_empty.xml

<item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_unrated_star" /> 

<item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_unrated_star" /> 

<item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_unrated_star" /> 

<item android:drawable="@drawable/ic_unrated_star" /> 

3做出充满明星并将其命名为rating_filled.xml

<item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_rated_star" /> 

<item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_rated_star" /> 

<item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_rated_star" /> 

<item android:drawable="@drawable/ic_rated_star" /> 

4转到你的价值观文件夹,打开anothe绘制xml文件style.xml并添加样式

<style name="customRatingBar" parent="@android:style/Widget.RatingBar"> 
     <item name="android:progressDrawable">@drawable/rating_bar</item> 
    </style> 

5只使用自定义的评价吧,你刚才创建

<RatingBar 
    style="@style/customRatingBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|center" 
    android:numStars="5" /> 

注意ic_rated_staric_unrated_star是完全地充满星级空的星图像,你想要显示在你的评级栏。

希望这对你有用...祝你好运...

+1

如何根据条件更改评级栏的颜色?请在回答之前阅读问题。 –

+0

只需放置星星图像... – Kushal

4

对于API 23(MarshMallow),RatingBar确实遭受了所有恒星改变颜色的问题(无论它是1星还是5星),看起来它总是5星。

修订答: 下面的代码工作

if (ratingBar.getProgressDrawable() instanceof LayerDrawable) { 
    LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
    DrawableCompat.setTint(stars.getDrawable(2), color); 
} 
else { 
    // for Android 4.3, ratingBar.getProgressDrawable()=DrawableWrapperHoneycomb 
    DrawableCompat.setTint(ratingBar.getProgressDrawable(), color); 
} 

以下为Mashmallow

Drawable ratingBarColor = ratingBar.getProgressDrawable(); 
DrawableCompat.setTint(ratingBarColor, ContextCompat.getColor(getActivity(), R.color.red)); 

不起作用在布局文件记得用android.support.v7 .widget.AppCompatRatingBar,而不是RatingBar。

+0

感谢您的答案@Desmond。我会试试看。 –

+0

工作完美,谢谢! –