升级v7之后不能再转换为LayerDrawable了。

3

我正在使用最新版本的支持库,即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个回答

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
请尝试以下代码来设置进度条的颜色:

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


1
我发现getProgressDrawable()不再返回我的LayerDrawable了。
我通过样式设置了一个LayerDrawable背景,如下所示:
<item name="android:ratingBarStyle">@style/myRatingBarStyle</item>

自从v21.1添加了一个支持色调的版本RatingBar,即AppCompatRatingBar,它们现在从ratingBarStyle读取属性,而不是从android:ratingBarStyle。因此,我必须用以下行替换上面的行:
<item name="ratingBarStyle">@style/myRatingBarStyle</item>
<item name="android:ratingBarStyle">@style/myRatingBarStyle</item> //API21+

我的评分条样式是什么?请完整回答。 - Anand Savjani

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及以上版本进行样式设置以确保兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接