2015-05-15 5 views
3

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

ответ

1

Я узнал, что getProgressDrawable() больше не возвращал мой LayerDrawable.

Я установки LayerDrawable фона через стиль, с:

<item name="android:ratingBarStyle">@style/myRatingBarStyle</item> 

С v21.1 добавил оттенок-Aware версии RatingBar, AppCompatRatingBar, теперь они читают атрибуты из ratingBarStyle, а не android:ratingBarStyle. Так что мне пришлось заменить эту строку с:

<item name="ratingBarStyle">@style/myRatingBarStyle</item> 
<item name="android:ratingBarStyle">@style/myRatingBarStyle</item> //API21+ 
+0

Что такое myRatingBarStyle? завершите свой ответ –

0

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

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

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

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

1

Пожалуйста, попробуйте это для набора цвет ProgressBar

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

5

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

<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" 
    /> 
Смежные вопросы