Android studio resourcescompat getdrawable

Android getResources().getDrawable () устаревший API 22

С новым Android API 22 getResources().getDrawable() теперь устарел. Теперь лучший подход-использовать только getDrawable() .

10 ответов

у вас есть несколько вариантов для обработки этого устаревания справа (и будущее) способ, в зависимости от того, какой вид drawable вы загружаете:

A) drawables С атрибуты тема

вы получите стиль Drawable как ваша тема деятельности инструктирует. Это, наверное, то, что тебе нужно.

B) drawables без тема атрибуты

вы получите свой unstyled drawable по-старому. Обратите внимание: ResourcesCompat.getDrawable() is не устарел!

EXTRA) drawables С атрибуты темы из другое тема

Edit: см. мой блог на эту тему для более полного объяснения

вместо этого следует использовать следующий код из библиотеки поддержки:

использование этого метода эквивалентно вызову:

начиная с API 21, Вы должны использовать getDrawable(int, Theme) вместо getDrawable(int) , так как он позволяет извлекать объект мешочки, связанного с определенным идентификатором ресурса для данного плотность экрана/тема. Вызов устарел getDrawable(int) метод эквивалентен вызову getDrawable(int, null) .

заменить эту строку : getResources().getDrawable(R.drawable.your_drawable)

С ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)

ResourcesCompat также устарел. Но вы можете использовать это:

ContextCompat.getDrawable(this, R.drawable.your_drawable) (здесь this контекст)

для более подробной информации перейдите по этой ссылке: ContextCompat

Источник

Работа с изображениями

Ресурсы изображений

Одним из наиболее распространенных источников ресурсов являются файлы изображений. Android поддерживает следующие форматы файлов: .png (предпочтителен), .jpg (приемлем), .gif (нежелателен). Для графических файлов в проекте уже по умолчанию создана папка res/drawable . По умолчанию она уже содержит ряд файлов — пару файлов иконок:

При добавлении графических файлов в эту папку для каждого из них Android создает ресурс Drawable . После этого мы можем обратиться к ресурсу следующим образом в коде Java:

Например, добавим в проект в папку res/drawable какой-нибудь файл изображения. Для этого скопируем на жестком диске какой-нибудь файл с расширением png или jpg и вставим его в папку res/drawable (для копирования в проект используется простой Copy-Paste)

Далее нам будет предложено выбрать папку — drawable или drawable-24 . Для добавления обычных файлов изображений выберем drawable :

Здесь сразу стоит учесть, что файл изображения будет добавляться в приложение, тем самым увеличивая его размер. Кроме того, большие изображения отрицательно влияют на производительность. Поэтому лучше использовать небольшие и оптимизрованные (сжатые) графические файлы. Хотя, также стоит отметить, что все файлы изображений, которые добавляются в эту папку, могут автоматически оптимизироваться с помощью утилиты aapt во время построения проекта. Это позволяет уменьшить размер файла без потери качества.

Читайте также:  Android intent action naming

При копировании файла нам будет предложено установить для него новое имя.

Можно изменить название файла, а можно оставить так как есть. В моем случае файл называется dubi2.png . И затем нажмем на кнопку Refactor. И после этого в папку drawable будет добавлен выбранный нами файл изображения.

Для работы с изображениями в Android можно использовать различные элементы, но непосредственно для вывода изображений предназначен ImageView . Поэтому изменим файл activity_main.xml следующим образом:

В данном случае для отображения файла в ImageView у элемента устанавливается атрибут android:src . В его значении указывается имя графического ресурса, которое совпадает с именем файла без расширения. И после этого уже в Preview или в режиме дизайнере в Android Studio можно будет увидеть применение изображения, либо при запуске приложения:

Если бы мы создавали ImageView в коде java и из кода применяли бы ресурс, то activity могла бы выглядеть так:

В данном случае ресурс drawable напрямую передается в метод imageView.setImageResource() , и таким образом устанавливается изображение. В результате мы получим тот же результат.

Однако может возникнуть необходимость как-то обработать ресурс перед использованием или использовать его в других сценариях. В этом случае мы можем сначала получить его как объект Drawable и затем использовать для наших задач:

Для получения ресурса применяется метод ResourcesCompat.getDrawable() , в который передается объект Resources, идентификатор ресурса и тема. В данном случае тема нам не важна, поэтому для нее передаем значение null. Возвращается ресурс в виде объекта Drawable :

Затем, например, можно также передать ресурс объекту ImageView через его метод setImageDrawable()

Источник

Android getResources (). GetDrawable () устаревший API 22

С новым API android API 22 getResources().getDrawable() теперь устарел. Теперь лучший подход – использовать только getDrawable() .

У вас есть некоторые опции, позволяющие справиться с этим устареванием в правильном (и будущем ) способе, в зависимости от того, какой тип выгружаемого вы загружаете:

A) чертежи с атрибутами темы

Вы получите стилизованный Drawable, как указано в разделе «Активность». Вероятно, это то, что вам нужно.

B) чертежи без атрибутов темы

Вы получите свой неоригинальный доступный старый способ. Обратите внимание: ResourcesCompat.getDrawable() не устарел!

EXTRA) с атрибутами темы из другой темы

Изменить: см. Мое сообщение в блоге по этому вопросу для более полного объяснения

Вместо этого вы должны использовать следующий код из библиотеки поддержки:

Использование этого метода эквивалентно вызову:

Начиная с API 21, вы должны использовать метод getDrawable(int, Theme) вместо getDrawable(int) , поскольку он позволяет вам извлекать объект, связанный с определенным идентификатором ресурса для данной плотности экрана / темы. Вызов устаревшего getDrawable(int) эквивалентен вызову getDrawable(int, null) .

Замените эту строку: getResources().getDrawable(R.drawable.your_drawable)

С ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)

ResourcesCompat также устарел. Но вы можете использовать это:

ContextCompat.getDrawable(this, R.drawable.your_drawable) (Вот this контекст)

Для получения более подробной информации перейдите по этой ссылке: ContextCompat

getResources().getDrawable() устарел на уровне API 22. Теперь мы должны добавить тему:

GetDrawable (int id, Resources.Theme theme) (добавлен в уровень API 21)

Это пример проверки для более поздних версий:

Вы можете использовать

Это работа для меня

Просто пример того, как я исправил проблему в массиве для загрузки listView, надеюсь, что это поможет.

Читайте также:  Как удалить айди с андроида

Источник

Android getResources (). GetDrawable () устарел API 22

С новым Android API 22 getResources().getDrawable() устарел. Теперь лучший подход — использовать только getDrawable() .

14 ответов

У вас есть несколько вариантов, как справиться с этой устаревшей информацией (и с расчетом на будущее ), в зависимости от того, какой тип рисования вы загружаете:

A) чертежи с атрибутами темы

Вы получите стиль Drawable, как указано в вашей теме Activity. Наверное, это то, что вам нужно.

Б) чертежи без атрибутов темы

Вы получите нестилизованный рисунок по-старому. Обратите внимание: ResourcesCompat.getDrawable() не устарел!

ДОПОЛНИТЕЛЬНО) объекты с атрибутами темы из другой темы

Для тех, кому все еще нужно решить эту проблему даже после применения предложения этого потока (раньше я был таким), добавьте эту строку в свой класс приложения, метод onCreate ()

Как было предложено, здесь и здесь иногда требуется, чтобы доступ к векторам из ресурсов, особенно когда вы имеете дело с пунктами меню и т. д.

Ты можешь использовать

Это работает для меня

Build.VERSION_CODES.LOLLIPOP теперь должен быть изменен на BuildVersionCodes.Lollipop, то есть:

Теперь вам нужно реализовать вот так

Достаточно одной строчки кода, обо всем позаботится ContextCompat.getDrawable

En api уровень 14

Если вы нацеливаетесь на SDK> 21 (леденец или 5.0), используйте

Просто пример того, как я исправил проблему в массиве для загрузки listView, надеюсь, это поможет.

В Kotlin вы можете использовать расширение

Затем используйте как

getDrawable (int drawable) не рекомендуется на уровне API 22. Для справки см. Эту ссылка .

Теперь, чтобы решить эту проблему, мы должны передать новую конструкцию вместе с идентификатором, например: —

Для решений Сделайте так: —

В Java: —

или

В Котлине: —

или

Надеюсь, это поможет вам. Спасибо.

getResources().getDrawable() устарел на уровне API 22. Теперь мы должны добавить тему:

Это пример проверки для более поздних версий:

Замените эту строку: getResources().getDrawable(R.drawable.your_drawable)

С ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)

ResourcesCompat теперь также устарел. Но вы можете использовать это:

ContextCompat.getDrawable(this, R.drawable.your_drawable) (здесь this — контекст)

Для получения дополнительных сведений перейдите по этой ссылке: ContextCompat

Изменить: см. мое сообщение в блоге по этому вопросу для более полного объяснения.

Вместо этого вам следует использовать следующий код из библиотеки поддержки:

Использование этого метода эквивалентно вызову:

Начиная с API 21, вы должны использовать метод getDrawable(int, Theme) вместо getDrawable(int) , так как он позволяет вам получать доступный для рисования объект, связанный с определенным идентификатором ресурса для данной плотности экрана / темы. Вызов устаревшего метода getDrawable(int) эквивалентен вызову getDrawable(int, null) .

Источник

ResourcesCompat.getDrawable () vs AppCompatResources.getDrawable()

Я немного запутался с этими двумя API.

возвращает объект мешочки, связанного с определенным идентификатором ресурса и стиле на заданную тему. Различные типы объектов будут возвращены в зависимости от базового ресурса — например, сплошной цвет, PNG-изображение, масштабируемое изображение и т. д.

до уровня API 21, тема не будет применяться, и этот метод просто вызывает getDrawable (int).

возвращает объект катры, связанного с определенным идентификатором ресурса.

этот метод поддерживает инфляции вектор и мультипликация-вектор ресурсы на устройствах с поддержкой платформы не доступный.

вопрос

  1. в чем существенная разница между этими двумя классами (кроме того!—3—>вектор инфляция)?
  2. какой из них следует предпочесть другому и почему?
Читайте также:  Android system webview xiaomi что это такое

3 ответов

глядя на исходный код этих двух методов, они кажутся очень похожими. Если у вас нет направления, вы можете использовать либо одно, либо другое.

ResourceCompat.getDrawable() будем называть Resources#getDrawable(int, theme) на APIs 21 или выше. Он также поддерживает Android APIs 4+. Это не более чем:

где-в ResourcesCompatApi21 просто называет res.getDrawable(id, theme) . Это означает, что это будет не разрешить рисование векторных чертежей, если устройство не поддерживает векторные чертежи. Это, однако, позволит вам перейти к теме.

между тем, изменение кода для AppCompatResources.getDrawable (контекстный контекст, int resId) в конце концов приземляется на это:

таким образом, этот экземпляр попытается нарисовать ресурс, если он может, иначе он выглядит в ContextCompat версия для получения ресурсов. Тогда он даже будет окрашивать его, если это необходимо. Однако, этот метод поддерживает только API 7+.

так что я думаю решить, если вы должны использовать либо

вам нужно поддерживать API 4, 5 или 6?

  • Да: нет выбора, кроме как использовать ResourcesCompat или ContextCompat .
  • нет: продолжайте идти к #2.

вам абсолютно необходимо предоставить пользовательскую тему?

  • Да: нет выбора, кроме как использовать ResourcesCompat
  • Нет: Использовать AppCompatResources

вот мой понимаю после некоторого теста

первое, что вижу-это VectorDrawableCompat и ResourcesCompat может конкретная тема

I) без использования

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); на onCreated класса приложения

1) для векторного изображения

  • ContextCompat хорошо работать
  • ResourcesCompat хорошо работать
  • AppCompatResources работа ну!—47—>
  • VectorDrawableCompat хорошо работать
  • ContextCompat авария
  • ResourcesCompat авария
  • AppCompatResources хорошо работать
  • VectorDrawableCompat хорошо работать

2) для нормального изображения

  • на всех уровнях
    • ContextCompat работа ну!—47—>
    • ResourcesCompat хорошо работать
    • AppCompatResources хорошо работать
    • VectorDrawableCompat авария

II) использовать

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); на onCreated класса приложения

1) для векторного изображения

  • на всех уровнях
    • ContextCompat хорошо работать
    • ResourcesCompat хорошо работать
    • AppCompatResources работа ну!—47—>
    • VectorDrawableCompat хорошо работать

2) для нормального изображения

  • на всех уровнях
    • ContextCompat хорошо работать
    • ResourcesCompat хорошо работать
    • AppCompatResources хорошо работать
    • VectorDrawableCompat авария

ContextCompat

ResourcesCompat , ContextCompat и практически любой класс из support-v4, заканчивающийся на Compat спасает вас от написания if (Build.VERSION.SDK_INT >= X) проверяет везде. Вот и все. Например, вместо

применяются ограничения, описанные в комментариях, например

фактически не применяет атрибуты темы перед Lollipop (об этом говорится в документации). Но тебе не обязательно писать, если проверяет, и ваш код не аварийно завершает работу на старых устройствах, потому что вы фактически не используете новые API.

AppCompatResources

AppCompatResources С другой стороны, фактически поможет вам принести новые функции на старые платформы (векторы поддержки, ссылки на темы в списках состояний цвета).

какой из них следует предпочесть другому и почему?

использовать AppCompatResources чтобы получить согласованные результаты с остальной частью библиотеки appcompat-v7. Вы получить:

  • getColorStateList который может разрешать цвета со ссылками на атрибуты темы (например, android:alpha=»?android:disabledAlpha» ),
  • getDrawable который поддерживает раздувание векторов на всех платформах, и эти векторные чертежи также понимают ссылки на атрибуты темы (например, android:tint=»?colorControlNormal» ),
  • AppCompat-V7 drawables и цвета, такие как флажки или переключатели, будут иметь правильные цвета, определенные поставляемой темой контекста,
  • если вышеуказанное не применяется, то оно падает назад к ContextCompat в любом случае.

Источник

Оцените статью