- Android getResources().getDrawable () устаревший API 22
- 10 ответов
- Edit: см. мой блог на эту тему для более полного объяснения
- Работа с изображениями
- Ресурсы изображений
- Android getResources (). GetDrawable () устаревший API 22
- Изменить: см. Мое сообщение в блоге по этому вопросу для более полного объяснения
- getResources().getDrawable() устарел на уровне API 22. Теперь мы должны добавить тему:
- Android getResources (). GetDrawable () устарел API 22
- 14 ответов
- getResources().getDrawable() устарел на уровне API 22. Теперь мы должны добавить тему:
- Изменить: см. мое сообщение в блоге по этому вопросу для более полного объяснения.
- ResourcesCompat.getDrawable () vs AppCompatResources.getDrawable()
- вопрос
- 3 ответов
- I) без использования
- II) использовать
- ContextCompat
- AppCompatResources
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 во время построения проекта. Это позволяет уменьшить размер файла без потери качества.
При копировании файла нам будет предложено установить для него новое имя.
Можно изменить название файла, а можно оставить так как есть. В моем случае файл называется 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).
возвращает объект катры, связанного с определенным идентификатором ресурса.
этот метод поддерживает инфляции вектор и мультипликация-вектор ресурсы на устройствах с поддержкой платформы не доступный.
вопрос
- в чем существенная разница между этими двумя классами (кроме того!—3—>вектор инфляция)?
- какой из них следует предпочесть другому и почему?
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 в любом случае.
Источник