С новым Android API 22 getResources().getDrawable()
теперь устарела. Теперь лучшим подходом является использование только getDrawable()
.
Что изменилось?
С новым Android API 22 getResources().getDrawable()
теперь устарела. Теперь лучшим подходом является использование только getDrawable()
.
Что изменилось?
getDrawable (int id)
классаResources
устарел. Теперь вы должны использовать методgetDrawable (int id, Resources.Theme theme)
с новым параметром темы.Resources#getDrawable(int)
и другоеResources#getColor(int)
устарели.Ответы:
У вас есть несколько вариантов, чтобы справиться с этим устареванием правильным (и перспективным ) способом, в зависимости от того, какой вид рисования вы загружаете:
А) Drawables с атрибутами темы
Вы получите стиль Drawable в соответствии с инструкциями вашей темы. Это, вероятно, то, что вам нужно.
Б) рисования без атрибутов темы
Вы получите свой стиль без рисунка по-старому. Обратите внимание: не
ResourcesCompat.getDrawable()
считается устаревшим!ДОПОЛНИТЕЛЬНО) Drawables с атрибутами темы из другой темы
источник
Изменить: см. Мой блог на эту тему для более полного объяснения
Вместо этого вы должны использовать следующий код из библиотеки поддержки:
Использование этого метода эквивалентно вызову:
Начиная с API 21, вы должны использовать
getDrawable(int, Theme)
метод вместоgetDrawable(int)
, так как он позволяет вам выбирать рисуемый объект, связанный с конкретным идентификатором ресурса для данной плотности экрана / темы. Вызов устаревшегоgetDrawable(int)
метода эквивалентен вызовуgetDrawable(int, null)
.источник
getDrawable (int id)
методуContext
класса. Это то же самое, чтоgetResources().getDrawable(id, getTheme());
и новый API.getDrawable(int, Resources.Theme)
.Заменить эту строку:
getResources().getDrawable(R.drawable.your_drawable)
с
ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
РЕДАКТИРОВАТЬ
ResourcesCompat
также не рекомендуется сейчас. Но вы можете использовать это:ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Вотthis
контекст)для более подробной информации перейдите по этой ссылке: ContextCompat
источник
ResourcesCompat
это устарело. Это должно работать нормально.getResources().getDrawable()
устарел на уровне API 22. Теперь мы должны добавить тему:getDrawable (int id, тема Resources.Theme) (добавлено на уровне API 21)
Это пример:
Это пример того, как проверить для более поздних версий:
источник
Build.VERSION_CODES.LOLLIPOP is API 21
Так не должно ли это бытьif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
илиif (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? Ничего. Снизу «Метод был добавлен в API 21, но не обновлялся до API 22. :)»Ты можешь использовать
это работа для меня
источник
Просто пример того, как я исправил проблему в массиве для загрузки listView, надеюсь, это поможет.
источник
Попробуй это:
источник
Если вы нацеливаетесь на SDK> 21 (леденец или 5.0), используйте
См документы
источник
getDrawable (int drawable) устарела на уровне API 22. Для справки см. эту ссылку .
Теперь, чтобы решить эту проблему, мы должны передать новый конструктор вместе с id как:
Для решений Сделайте так: -
В Java: -
или
В Котлине: -
или
Надеюсь, это поможет вам. Спасибо.
источник
en api level 14
источник
Теперь вам нужно реализовать так
Достаточно одной строки кода, все позаботится о ContextCompat.getDrawable
источник
Для тех, кто все еще может решить эту проблему даже после применения предложения этого потока (я был таким), добавьте эту строку в свой класс Application, метод onCreate ()
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Как предлагается здесь и здесь, иногда это требуется для доступа к векторам из ресурсов, особенно когда вы имеете дело с пунктами меню и т. Д.
источник
В Kotlin вы можете использовать расширение
затем использовать как
источник
Build.VERSION_CODES.LOLLIPOP теперь должен быть изменен на BuildVersionCodes.Lollipop, то есть:
источник
BuildVersionCodes
класс не специфичен для Xamarin?