小智 119
在提到的博客上有点复杂,我使用了类似但更简单的方法.你需要3星图像(red_star_full.png,red_star_half.png和red_star_empty.png)和一个xml,这就是全部.
将这3张图片放在res/drawable上.
放下以下ratingbar_red.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/red_star_empty" />
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/red_star_half" />
<item android:id="@android:id/progress" android:drawable="@drawable/red_star_full" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
最后,告诉你的ratingbar定义使用它,即
<RatingBar android:progressDrawable="@drawable/ratingbar_red"/>
Run Code Online (Sandbox Code Playgroud)
而已.
Mir*_*lak 90
试试这个,如果你只想改变颜色:
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)
小智 67
最简单的方法对我有用......如果你正在扩展AppCompat Activity
在build.gradle中添加最新的appcompat库.
dependencies {
compile 'com.android.support:appcompat-v7:X.X.X' // where X.X.X version
}
Run Code Online (Sandbox Code Playgroud)
使您的活动扩展android.support.v7.app.AppCompatActivity
public class MainActivity extends AppCompatActivity {
...
}
Run Code Online (Sandbox Code Playgroud)
在styles.xml文件中声明自定义样式.
<style name="RatingBar" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/indigo</item>
<item name="colorControlActivated">@color/pink</item>
</style>
Run Code Online (Sandbox Code Playgroud)
通过android:theme属性将此样式应用于RatingBar.
<RatingBar
android:theme="@style/RatingBar"
android:rating="3"
android:stepSize="0.5"
android:numStars="5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)
lgv*_*lle 46
2015年更新
现在您可以使用DrawableCompat来着色所有类型的drawable.例如:
Drawable progress = ratingBar.getProgressDrawable();
DrawableCompat.setTint(progress, Color.WHITE);
Run Code Online (Sandbox Code Playgroud)
这与API 4向后兼容
Yur*_*dov 35
如果你想改变我使用的所有星星的颜色:
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(getResources().getColor(R.color.starFullySelected), PorterDuff.Mode.SRC_ATOP);
stars.getDrawable(1).setColorFilter(getResources().getColor(R.color.starPartiallySelected), PorterDuff.Mode.SRC_ATOP);
stars.getDrawable(0).setColorFilter(getResources().getColor(R.color.starNotSelected), PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)
sup*_*cio 35
从API 21上可以很容易地用这三行代码改变星星的颜色:
android:progressTint="@android:color/holo_red_dark"
android:progressBackgroundTint="@android:color/holo_red_dark"
android:secondaryProgressTint="@android:color/holo_red_dark"
Run Code Online (Sandbox Code Playgroud)
这样做,你将改变星星的背景颜色和边框颜色.
Com*_*are 26
步骤1:创建自己的样式,克隆一个现有样式(从$ANDROID_HOME/platforms/$SDK/data/res/values/styles.xml
),将它放在您自己的项目中styles.xml
,并在将小部件添加到布局时引用它.
步骤#2:创建自己的LayerDrawable
XML资源RatingBar
,指向用于条形图的相应图像.原始样式将指向您可以与之比较的现有资源.然后,调整您的样式以使用您自己的LayerDrawable
资源,而不是内置资源.
dir*_*ill 25
Alex和CommonsWares发布的解决方案是正确的.Android从未谈到的一件事是不同密度的正确像素大小.以下是基于光晕的每种密度所需的尺寸.
小星星
mdpi: 16px
hdpi: 24px
xhdpi: 32px
xxhdpi: 48px
Run Code Online (Sandbox Code Playgroud)
中星
mdpi: 24px
hdpi: 36px
xhdpi: 48px
xxhdpi: 72px
Run Code Online (Sandbox Code Playgroud)
大明星
mdpi: 35px
hdpi: 52px
xhdpi: 69px
xxhdpi: 105px
Run Code Online (Sandbox Code Playgroud)
box*_*box 23
所以我一直在努力解决这个问题两个小时,我已经为所有API版本提出了一个可行的解决方案,其中还显示了半星评级.
private void setRatingStarColor(Drawable drawable, @ColorInt int color)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
DrawableCompat.setTint(drawable, color);
}
else
{
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
Run Code Online (Sandbox Code Playgroud)
您使用此drawables顺序调用该方法:
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
// Filled stars
setRatingStarColor(stars.getDrawable(2), ContextCompat.getColor(getContext(), R.color.foreground));
// Half filled stars
setRatingStarColor(stars.getDrawable(1), ContextCompat.getColor(getContext(), R.color.background));
// Empty stars
setRatingStarColor(stars.getDrawable(0), ContextCompat.getColor(getContext(), R.color.background));
Run Code Online (Sandbox Code Playgroud)
注意:您还必须在XML中指定属性"max"和"numStars",否则不会显示半星.
Dan*_*ar3 12
现在,您可以使用AppCompat v22.1.0以上的DrawableCompat动态着色所有类型的drawable,当您使用一组drawable支持多个主题时非常有用.例如:
LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(0)), Color.RED); // Empty star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), Color.GREEN); // Partial star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), Color.BLUE); // Full star
Run Code Online (Sandbox Code Playgroud)
这是向下兼容到API 4.另请参阅Chris Banes关于支持库v22.1.0的博客文章
对于实际的大小和形状,您需要为适当的大小定义新的样式和图层列表drawable,正如其他人已经在上面回答的那样.
hid*_*dro 10
使用android:theme
属性:
styles.xml
<style name="Theme.Rating" parent="Theme.AppCompat.Light">
<item name="colorAccent">@color/rating</item>
</style>
Run Code Online (Sandbox Code Playgroud)
layout.xml
<android.support.v7.widget.AppCompatRatingBar
android:theme="@style/Theme.Rating"
android:numStars="5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
只需从xml更改评级栏的颜色: -
android:progressTint="@color/your_color"
android:backgroundTint="@color/your_color"
android:secondaryProgressTint="@color/your_color"
Run Code Online (Sandbox Code Playgroud)
小智 7
要更改您只需要设置的颜色,请设置参数android:progressTint
<RatingBar
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="15dp"
android:numStars="5"
android:rating="1"
android:progressTint="@android:/color/black"
android:layout_gravity="center"
/>
Run Code Online (Sandbox Code Playgroud)
对于样式属性的大小.
在不添加新样式的情况下,您可以在 RatingBar
<RatingBar
android:id="@+id/ratingBar"
style="@android:style/Widget.Holo.RatingBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:rating="4.5"
android:stepSize="0.5"
android:progressTint="@color/colorPrimary"/>
Run Code Online (Sandbox Code Playgroud)
最简单的方法:
android:progressTint="@color/color"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
132452 次 |
最近记录: |