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

问题描述:

我正在使用最新版本的支持库22.1.1。无法转换为LayerDrawable(升级v7后)

我去,如:

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测试。任何提示&解决方法?

我发现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+ 
+0

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

当你使用程序兼容性库你的很多款式还没有到包括机器人:,所以上面的代码具有以下格式:

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

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

基本上你需要为V21.1和更高版本以及兼容性设计风格,如果你正在设计几个对象。

请尝试这一个进度

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

我有同样的问题的一套颜色。我搜索了它,发现如果我们写入

<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" 
    />