自定义RatingBar着色API <21,支持库22.1.1

Mar*_*rre 9 android android-support-library android-drawable

我正在使用支持库22.1.1.我的目标是为自定义RatingBar着色,以避免在我的APK中包含多个图像.

着色在API 22上正确应用,但在API 19上没有.我希望它能在API> = 16上工作.请注意,我只是尝试着色"进度",而不是完整的条.

这是RatingBar风格:

<style name="customRatingBar" parent="Widget.AppCompat.RatingBar">
    <item name="android:progressDrawable">@drawable/custom_ratingbar</item>
    <item name="android:minHeight">24dp</item>
    <item name="android:maxHeight">24dp</item>
    <item name="android:progressTint">@color/md_red_700</item>
    <item name="android:secondaryProgressTint">@color/md_red_700</item>
</style>
Run Code Online (Sandbox Code Playgroud)

custom_ratingbar.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/ic_heart_outline_grey600_24dp" />
    <item android:id="@android:id/progress"
        android:drawable="@drawable/ic_heart_grey600_24dp" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)

它在我的布局中以这种方式应用,它在一个片段中扩展android.support.v4.Fragment自己在一个活动扩展中android.support.v7.app.AppCompatActivity:

<RatingBar
    android:layout_width="wrap_content"
    android:layout_height="22dp"
    android:id="@+id/checkin_rating"
    style="@style/customRatingBar"
    android:isIndicator="true"
    android:numStars="5"
    android:stepSize="1"
    android:layout_marginBottom="8dp"/>
Run Code Online (Sandbox Code Playgroud)

我从lint工具得到一个警告,说android:progressTintAPI <21不支持.有没有办法在不使用多个drawable的情况下实现这个目的?

Gar*_*ême 14

随着支持库> 22我设法使用 getProgressDrawable

LayerDrawable stars = (LayerDrawable) bar.getProgressDrawable();
stars.getDrawable(0).setColorFilter(NONE_COLOR, PorterDuff.Mode.SRC_ATOP);
stars.getDrawable(1).setColorFilter(FULL_COLOR, PorterDuff.Mode.SRC_ATOP);
stars.getDrawable(2).setColorFilter(PARTIAL_COLOR, PorterDuff.Mode.SRC_ATOP);
Run Code Online (Sandbox Code Playgroud)

这在支持库22之前不起作用,所以我认为这将解决您的问题.

  • 在4.1.1上,由getProgressDrawable返回的drawable不会强制转换为LayerDrawable并给出强制转换异常 (2认同)