Андоидные данные идентификатора ресурса
Обычно мы используем метод FindViewByID для получения ресурсов. Например, мы часто используем такие утверждения в методе Oncreate:
btnchecked = (imageView) findViewById (r.id.imgcheck);
FindViewByID - это удобный способ получить различные объекты представления в макете, такие как кнопки, этикетки, списки и изображения. Как следует из названия, для него требуется параметр int: идентификатор ресурса.
Идентификатор ресурса очень полезен. Android автоматически назначает идентификатор каждому ресурсу, расположенному в каталоге RES, включая различные файлы изображений и объекты «@+id» в тексте XML. Подкатария RES почти всегда фиксирован, например, те, которые вы можете видеть каждый раз: Drawable-xxxx, макет, значения и необычные: anim, xml, ряд, цвет.
Учебники Android говорят вам:
Res/ Drawable/ используется для хранения файлов изображений;
Res/ Mayout/ используется для хранения файлов определения макета;
res/ values/ используется для хранения некоторых переменных, параметров и других файлов.
Это все, что мы уже знаем. Кроме того, Android назначит идентификаторы всем ресурсам в каталоге Res, а его основные принципы распределения - это:
Файлы изображений в Drawable всегда представляют собой один идентификатор ресурса на файл.
Каждому представлению в файле XML, в котором используется Android: id = ”@+id/xxx», будет назначен неиспользованный идентификатор ресурса.
Может быть, все добавят другие более сложные правила.
В ADK API есть много методов, которые фактически используют идентификатор ресурса в качестве параметра.
Например, метод GetDrawable:
getResources (). getDrawable (r.drawable.sendsms_bk));
Буквально, метод getResources возвращает объект android.content.res.resources.
Метод Getdrawalbe возвращает натяжечный объект, мы знаем, что это изображение.
Параметр, используемый методом GetDrawable, является идентификатором ресурса.
Однако какие цифры это идентификаторы ресурсов INT? Или где они все размещены. Если вы достаточно осторожны, вы можете найти их в файле R.Java в каталоге Gen. У каждого шестнадцатеричного идентификатора целого числа есть очень имени атрибута, все они являются общедоступным статическим финалом, и рекомендуется не изменять их вручную. Эти идентификаторы ресурсов расположены в разных классовых иерархиях. Если вы посмотрите внимательно, вы найдете некоторые правила. Например, идентификатор ресурса в классе Drawable фактически представляет файл изображения в каталоге Res/Drawable; Идентификатор ресурса, содержащийся в классе макета, фактически представляет файл XML в каталоге Res/Mayout; Идентификатор ресурса, содержащийся в классе ID, фактически представляет объект виджета с использованием Android: id = "@+id/xxx" в макете XML -файла - конечно, если вы используете "@+tire/xxx", в R.Java будет создан класс Tire.
Благодаря вышеупомянутому пониманию мы обнаружили, что идентификатор ресурса является переменной или свойством, которое начинается с "R." - Потому что все это определено в классе R - этот класс не тот же R, что и Android.R, и они не находятся на одном уровне упаковки. Прежнее определяет ресурсы Android Framework, такие как: android.r.layout.simple_expandable_list_item_1, android.r.layout.simple_expandable_list_item_2. Вы использовали эти ресурсы? Если у вас есть время, вы можете попробовать. Другой R - наш собственный R, который определяет наш собственный идентификатор ресурса. Мы можем использовать идентификаторы ресурсов в объектно-ориентированном r.xxx.yyy, и, конечно, мы можем использовать их напрямую с шестнадцатеричными числами.
Идентификатор ресурса настолько важен в Android, поэтому мы можем получить ресурс до тех пор, пока мы получаем идентификатор ресурса. Поскольку в некоторых случаях мы не можем использовать константу в качестве идентификатора ресурса (потому что мы хотим заменить его переменной), мы можем только динамически получить идентификатор ресурса двумя способами:
1. Отражение
Отражение Java настолько сильнее, что мы всегда думаем об этом, когда мы отчаянно нуждаемся. Давайте посмотрим на кусок кода:
try {field field = r.drawable.class.getfield (type); int i = field.getint (new R.Drawable ()); Log.d (Tag, i+""); return i;} catch (Exception e) {log.e (Tag, e.toString ()); return r.drawable.unknow;}Тип является переменной, и его возможные значения будут «близкими», «редактировать», «значок» и т. Д. Мы используем поле класса отражения Java, чтобы получить доступ к поле под классом R.Drawable. Фактически, мы знаем, что поле под R.Drawable является идентификатором ресурса файла изображения в каталоге Res.Drawable-XXXX. Следовательно, запуск вышеуказанного кода фактически должен получить идентификатор ресурса соответствующего файла изображения через строку. Например, когда значение типа является «значок», приведенный выше код получит идентификатор ресурса файла изображения icon.png в каталоге res.drawable-xxxx и вернет его нам. Для нас естественно отображать изображение в ImageView через идентификатор ресурса.
2. Используйте метод GetIdentifier класса ресурсов
Использование отражения все еще является хлопотом. Если вы используете класс Android.content.res.resources, чтобы сделать то же самое, это всего лишь два предложения:
Ресурсы res = getResources (); return res.getidentifier (тип, "Drawable", getPackageName ());
Метод GetResources поступает из контекста (то есть класса деятельности), который может напрямую возвращать объект ресурсов. Метод ресурсов GetEidentifier может вернуть любой идентификатор ресурса в R.Java. Конечно, вы должны указать 3 параметра: имя поля, имя класса и имя пакета. Имя пакета часть полностью квалифицированного имени, указанного по имени пакета. Если полностью квалифицированное имя r - это android.r или com.company.r, имя пакета - «Android» или «com.company». GetPackageName на самом деле это. GetPackageName (), который непосредственно возвращает имя пакета этого класса.
Имя класса - это класс, которому принадлежит ресурс. Например, как мы знаем, несколько фиксированных классов в классе R.Java: Drawable, Id, String, Mayout и т. Д., И под ними определены многие идентификаторы ресурсов.
Имя поля - имя идентификатора ресурса. Например, определение идентификатора ресурса:
Public Static Final int del = 0x7f020002;
DEL - это имя идентификатор ресурса, а 0x7F020002 - его шестнадцатеричное значение.
С 3 параметрами метод GetEidentifier может получить идентификатор ресурса, сравнивая динамические методы.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!