Android 无法再强制转换为LayerDrawable(升级v7后)

Android 无法再强制转换为LayerDrawable(升级v7后),android,android-support-library,android-appcompat,Android,Android Support Library,Android Appcompat,我正在使用支持库的最新版本22.1.1 <android.widget.RatingBar android:layout_width="wrap_content" android:numStars="5" android:layout_height="wrap_content" /> 我过去喜欢这样: mRatingBar = (RatingBar) getActivity().findViewById(R.id.rating); LayerDraw

我正在使用支持库的最新版本22.1.1

<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />
我过去喜欢这样:

mRatingBar = (RatingBar) getActivity().findViewById(R.id.rating);
LayerDrawable layer = (LayerDrawable) mRatingBar.getProgressDrawable();
<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />
但升级后,它在第2行崩溃,出现
ClassCastException

android.support.v4.graphics.drawable.DrawableWrapperHoneycomb cannot be cast to android.graphics.drawable.LayerDrawable
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:973)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458)
            at android.os.Handler.handleCallback(Handler.java:725)
<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />

我正在安卓4.2.2上测试。有什么提示和解决方法吗?

我发现
getProgressDrawable()
不再返回我的
LayerDrawable

<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />
我通过样式设置了一个
LayerDrawable
背景,包括:

<item name="android:ratingBarStyle">@style/myRatingBarStyle</item>
<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />

当您使用AppCompat库时,您的许多样式都不必包含android:,因此上面的代码具有以下格式:

<!-- Customize your theme here. -->
<item name="android:ratingBarStyle">@style/myRatingBarStyle</item>
···

<!-- Support library compatibility -->
<item name="ratingBarStyle">@style/myRatingBarStyle</item> 
···
<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />

@样式/myRatingBarStyle
···
@样式/myRatingBarStyle
···

基本上,如果要设置多个对象的样式,您需要为V21.1及以上版本设置样式,并考虑兼容性。

请尝试为progressbar设置颜色

<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />

DrawableCompat.setTint(ratingBar.getProgressDrawable(),颜色)

我收到了同样的问题。我搜索了一下,发现如果我们写

<RatingBar
android:layout_width="wrap_content"
android:numStars="5"
android:layout_height="wrap_content"
/>
<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />

在XML文件中。然后,Android默认情况下将RatingBar转换为,Android.support.v7.widget.AppCompatingBar,而不是Android.widget.RatingBar

<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />

只要用下面的代码修改你的代码,问题就会得到解决

<android.widget.RatingBar
    android:layout_width="wrap_content"
    android:numStars="5"
    android:layout_height="wrap_content"
    />

什么是myRatingBarStyle?请填写你的答案