Невозможно использовать LayerDrawable больше (после обновления v7)

Я использую последнюю версию библиотек поддержки, 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. Любые подсказки и обходные пути?

У меня такая же проблема. Я искал его и обнаружил, что, если мы напишем

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

В файле XML. Than, 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" /> 

Я узнал, что 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+ 

Попробуйте эту настройку для заданного цвета индикатора прогресса

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

Когда вы используете библиотеки AppCompat, многие из ваших стилей не должны включать android:, поэтому приведенный выше код имеет такой формат:

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

В основном вам нужно стилизовать для V21.1 и выше и для совместимости, если вы ставите несколько объектов.

Intereting Posts