Android 无法再强制转换为LayerDrawable(升级v7后)
我正在使用支持库的最新版本22.1.1Android 无法再强制转换为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
<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?请填写你的答案