无法再转换为LayerDrawable(在升级v7之后)

时间:2015-05-15 18:23:34

标签: android android-support-library appcompat-v7-r22.1

我使用的是最新版本的支持库,22.1.1。

我过去喜欢:

mRatingBar = (RatingBar) getActivity().findViewById(R.id.rating);
LayerDrawable layer = (LayerDrawable) mRatingBar.getProgressDrawable();

但在升级之后,它会在第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 4.2.2上进行测试。任何提示&解决办法:

4 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。我搜索了它,发现,如果我们写

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

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

只需使用以下代码修改您的代码,问题就会得到解决。

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

答案 1 :(得分:1)

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

我通过样式设置了LayerDrawable背景,其中包含:

<item name="android:ratingBarStyle">@style/myRatingBarStyle</item>

由于v21.1添加了RatingBarAppCompatRatingBar的色彩感知版本,因此他们现在从ratingBarStyle而不是android:ratingBarStyle读取属性。所以我不得不用以下代码替换上面的行:

<item name="ratingBarStyle">@style/myRatingBarStyle</item>
<item name="android:ratingBarStyle">@style/myRatingBarStyle</item> //API21+

答案 2 :(得分:1)

请尝试使用此项来设置进度条的颜色

DrawableCompat.setTint(ratingBar.getProgressDrawable(),color);

答案 3 :(得分:0)

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

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

<!-- Support library compatibility -->
<item name="ratingBarStyle">@style/myRatingBarStyle</item> 
···

基本上,如果要为多个对象设置样式,则需要为V21.1及更高版本设置样式以及兼容性。