无法转换为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添加的RatingBar
,AppCompatRatingBar
色调感知的版本,他们现在ratingBarStyle
读取属性,而不是android:ratingBarStyle
。所以我不得不更换上述行:
<item name="ratingBarStyle">@style/myRatingBarStyle</item>
<item name="android:ratingBarStyle">@style/myRatingBarStyle</item> //API21+
答
当你使用程序兼容性库你的很多款式还没有到包括机器人:,所以上面的代码具有以下格式:
<!-- 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"
/>
什么是myRatingBarStyle?请填写你的答案 –