R java android studio где найти

Обновлено: 06.07.2024

Ресурс в приложении Android представляет собой файл, например, файл разметки интерфейса или некоторое значение, например, простую строку. То есть ресурсы представляют собой и файлы разметки, и отдельные строки, и звуковые файлы, файлы изображений и т.д. Все ресурсы находятся в проекте в каталоге res . Для различных типов ресурсов, определенных в проекте, в каталоге res создаются подкаталоги. Поддерживаемые подкаталоги:

animator/ : xml-файлы, определяющие анимацию свойств

anim/ : xml-файлы, определяющие tween-анимацию

color/ : xml-файлы, определяющие список цветов

drawable/ : Графические файлы ( .jpg , .jpg , .jpg )

mipmap/ : Графические файлы, используемые для иконок приложения под различные разрешения экранов

layout/ : xml-файлы, определяющие пользовательский интерфейс приложения

menu/ : xml-файлы, определяющие меню приложения

raw/ : различные файлы, которые сохраняются в исходном виде

values/ : xml-файлы, которые содержат различные используемые в приложении значения, например, ресурсы строк

xml/ : Произвольные xml-файлы

font/ : файлы с определениями шрифтом и расширениями .ttf, .otf или .ttc, либо файлы XML, который содержат элемент <font-family>

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

элемент в файле

strings.xml или arrays.xml

Логические значения Boolean

Массив целых чисел

Файлы с расширением jpg и png

Файл xml с произвольным названием

Файл xml с произвольным названием

Файл xml с произвольным названием

<set>, <objectAnimator>, <valueAnimator>

Файл xml с произвольным названием

Файл xml с произвольным названием

Бинарные и текстовые ресурсы

Файлы мультимедиа (mp3, mp4), текстовые и другие файлы

Разметка графического интерфейса

Файл xml с произвольным названием

К примеру, если мы возьмем стандартный проект Android Studio, который создается по умолчанию, то там можем заметить наличие уже нескольких папок для различных ресурсов в каталоге res :

Ресурсы в Android Studio

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

Когда происходит компиляция проекта сведения обо всех ресурсах добавляются в специальный файл R.jar , который затем используется при работе с ресурсами

Применение ресурсов

Существует два способа доступа к ресурсам: в файле исходного кода и в файле xml.

Ссылка на ресурсы в коде

Тип ресурса в данной записи ссылается на одно из пространств (вложенных классов), определенных в файле R.java, которые имеют соответствующие им типы в xml:

R.drawable (ему соответствует тип в xml drawable )

Например, для установки ресурса activity_main.xml в качестве графического интерфейса в коде MainActivity в методе onCreate() есть такая строка:

Через выражение R.layout.activity_main мы и ссылаемся на ресурс activity_main.xml, где layout - тип ресурса, а activity_main - имя ресурса.

Подобным образом мы можем получать другие ресурсы. Например, в файле res/values/strings.xml определен ресурс app_name:

Этот ресурс ссылается на строку. Чтобы получить ссылку на данный ресурс в коде java, мы можем использовать выражение R.string.app_name .

Доступ в файле xml

Нередко возникает необходимость ссылаться на ресурс в файле xml, например, в файле, который определяет визуальный интерфейс, к примеру, в activity_main.xml. Ссылки на ресурсы в файлах xml имеют следующую формализованную форму: @[имя_пакета:]тип_ресурса/имя_ресурса

имя_пакета представляет имя пакета, в котором ресурс находится (указывать необязательно, если ресурс находится в том же пакете)

тип_ресурса представляет подкласс, определенный в классе R для типа ресурса

имя_ресурса имя файла ресурса без расширения или значение атрибута android:name в XML-элементе (для простых значений).

Например, мы хотим вывести в элемент TextView строку, которая определена в виде ресурса в файле strings.xml:

В данном случае свойство text в качестве значения будет получать значение строкового ресурса app_name.

Метод getResources

Для получения ресурсов в классе Activity мы можем использовать метод getResources() , который возвращает объект android.content.res.Resources . Но чтобы получить сам ресурс, нам надо у полученного объекта Resources вызвать один из методов. Некоторые из его методов:

getString() : возвращает строку из файла strings.xml по числовому идентификатору

getDimension() : возвращает числовое значение - ресурс dimen

getDrawable() : возвращает графический файл в виде объекта Drawable

getBoolean() : возвращает значение boolean

getColor() : возвращает определение цвета

getColorStateList() : возвращает объект ColorStateList - набор цветов

getFont() : возвращает определение шрифта в виде объекта Typeface

getFloat() : возвращает значение float

getLayout() : возвращает объект XmlResourceParser, связанный с файлом layout

Это только некоторые методы. Но все они в качестве параметра принимают идентификатор ресурса, который надо получить. Вкратце рассмотрим их применение. Возьмем тот же файл res/values/strings.xml в качестве источника ресурсов, который в моем случае выглядит так:

И изменим код MainActivity:

Здесь, используя метод getResources() получаем все ресурсы и затем используем их для устаноки значений свойств графических элементов. При запуске приложения мы увидим применение полученных ресурсов:

Использование ресурсов в Android Studio

Подобным образом мы можем программно получать и другие ресурсы и использоват их в приложении. Однако следует отметить, что в данном случае нам не нужно использовать метод getResources() и вообще производить какие-то определенные действия по получению ресурса, поскольку метод setText() класса TextView поддерживает прямую установку текста по идентификатору ресурса:

android

Ресурсы - внешние файлы (не код), которые используются Вашим кодом, закомпилированы в Ваше приложение и встраиваются в него во время работы. Андроид поддерживает многие различные виды файлов ресурсов, включая XML, PNG и JPEG. Файлы XML имеют сильно различающиеся форматы в зависимости от того, что они описывают. Ресурсы описаны в исходном коде, и файлы XML откомпилированы в двоичный код для быстрой и эффективной загрузки. Строки сжаты в более форму, более экономящую память.

Список ресурсов

Типы ресурсов и их местоположение:

- стили, строки и массивы - “/res/values/” .

- Названия не могут отличаться:

- ‘arrays.xml’ для определения массивов.

- ‘colors.xml’ для определения цветов.

- ‘dimens.xml’ для определения размеров (dimensions).

- ‘strings.xml’ для определения строк.

- ‘styles.xml’ для определения стилей объектов.

- необработанные файлы вроде mp3 или видео - “/res/raw/”

Использование ресурсов в коде

Для использования ресурса в коде нужно знать только полный ID ресурса и в какой тип объекта Ваш ресурс был откомпилирован. Вот синтаксис обращения к ресурсу:

R.resource_type.resource_nameт или android.R.resource_type.resource_name

resource_type - подкласс R, который содержит определенный тип ресурса. resource_name - атрибут ресурсов, определенный в файлах XML, или имя файла (без расширения) для ресурса, определенных другими типами файла. Каждый тип ресурса будет добавлен в подкласс R, в зависимости от его типа.

Ресурсы, откомпилированные Вашим приложением, могут быть использованы без названия пакета (просто как R.resource_type.resource_name). Андроид содержит многие стандартные ресурсы, такие как стили экрана и фоны кнопки. Обращаться к ним в коде Вы можете через android.R.resource_type.resource_name, для примера: android.R.drawable.button_background.

Ссылка на Ресурсы

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

Например, если у нас есть ресурсы с цветами, мы можем написать layout файл, который установит цвет текста на значение, содержащееся в одном из ресурсов:

Обратите внимание на префикс "@", показывающий, что это - ссылка на ресурс, текст после него - название ресурса в форме @[пакет:]тип/имя. В примере мы не определяем пакет, потому что ссылаемся на ресурс в нашем собственном пакете. Чтобы сослаться на системный ресурс, Вы должны были бы написать:

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

Альтернативные Ресурсы & Локализация

Альтернативные Ресурсы и Локализация - серьезная проблема, достаточно хорошо решенная в Андроиде. Обычно чаще всего Вы должны были бы проектировать UI, хорошо подходящий для каждого из возможных разрешений экрана одновременно, что почти невозможно.

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

Заметьте, что даже если Вы добавите много разных языков, UI и всех других ресурсов, SDK сам определит набор ресурсов, который будет использоваться. К примеру, Андроид сам догадается, где какой язык Вам нужен и выберет его. Или UI. Чтобы включать дополнительные ресурсы, создайте параллельные папки с ресурсами и к каждому названию через черточку добавьте параметр (спецификатор), куда эта папка относится (язык, ориентация экрана, точки на дюйм, разрешение, …). Вот, например, у этого проекта есть английская и немецкая локализация (здесь только строки):

Андроид поддерживает несколько типов спецификаторов, с различными значениями для каждого. Добавьте их концу названия папки ресурса, отделив от названия черточкой. Вы можете добавить много спецификаторов, отделяя их друг от друга черточками. Например, папка, содержащая drawable ресурсы только для определенной конфигурации:

Более того, Вы можете определить только несколько определенных опций конфигурации, для которых определен ресурс.

Андроид выберет, какой из различных основных файлов ресурса подходит лучше всего во время выполнения, в зависимости от текущей конфигурации устройства.

R.java - это файл, который содержит ссылки на ресурсы проекта. Он автоматически генерируется Android Development Toolkit во время компиляции проекта.

Прежде всего :-), я не настолько разбираюсь в java. Итак, в приведенном ниже коде я пытаюсь напечатать двумерную строку, возвращаемую методом. Но не смог этого сделать. Получение ошибки несоответствия типа. может кто-нибудь помочь. public class ExcelUtilAdvanced < public String[][] getDatafr.

Я написал этот код, но он собирается потерпеть неудачу в файле размера 1 ГБ. public class TestFiles < public static void main(String[] args) < int minLength = Integer.MAX_VALUE; int maxLength = Integer.MIN_VALUE; String minWord = ""; String maxWord = ""; .

Я просто пытаюсь освоить разработку под Android и использую последнюю версию Android Studio, однако я не могу найти файл R.java в представлении дерева папок: Я также очистил и перестроил свой проект, но все равно не вижу ни папки . /source/R, ни файла R.java.

«Gradle: сбой выполнения для задачи»: результаты: processDebugResources » Не удалось запустить /home/mydata/Desktop/android-studio/sdk/build-tools/android-4.2.2/aapt. Файл R.java пуст, я не знаю, причина вышеупомянутой ошибки или нет. Моя R.java находится в src / main / gen / com / example / result.

Контекст: я только что создал собственный проект с реагированием и работаю на нативной стороне Android. Дело в том, что я не могу импортировать ресурс из своего пакета, как import my.package.R. Автозаполнение позволяет только импортировать R из Android.R Я уже build -> clean -> rebuild и даже аннули.

Я делаю приложение для Android. По некоторым причинам мои текущие файлы проекта испортились. Чтобы решить эту проблему, я создал новый проект в Android Studio и скопировал файлы из предыдущего проекта в этот новый проект. Я аккуратно скопировал все файлы layout, values, java в нужное место. Я з.

Я хочу записать изображение в файл с помощью Java ImageIO. Это мой фрагмент кода: Document doc = convertDocument (fileName, "grey"); ImageIO.write(Converter.convertSVGToPNG(doc), "png", new File(FOLDER_PNG_OUT_GREY + fileName.replaceAll(".svg", ".jpg"))); .

Я изменил версию своего плагина для Android на последнюю, то есть 3.3.0, и после синхронизации проекта ссылка на класс R была потеряна и превратилась в красный цвет с надписью «Невозможно разрешить символ« R »».

Я только начал учиться писать приложения для Android Studio, так что прошу прощения за вопрос новичков. Я использую книгу «Разработка приложений для Android для чайников» и пытаюсь следовать ей, чтобы создать приложение переключения бесшумного режима. В книге говорится, что при перетаскивании изобра.

Не могли бы вы сказать мне, что три отдельные компоненты этого имени относятся? R.id.myView .

Хорошо, я искал и искал, и кажется, что у людей есть несколько схожие сценарии относительно моей проблемы, однако ни одно из представленных решений даже не предлагает разумного решения. Я недавно установил Visual Studio 2017. Я продолжил тестировать эмулятор Xamarin Android Emulator, создав приложе.

У меня есть следующий метод. public abstract String getIntent() И следующий класс public class Intents < public static final String SUCCEEDED = "SUCCEEDED"; public static final String FAILED = "FAILED"; // hundreds of other strings. >Я хотел бы заставить возвращаемый тип метода быть .

У меня есть несколько библиотечных проектов, и все они имеют зависимость от библиотеки поддержки. Мое приложение зависит от этих нескольких библиотечных проектов. Каждый проект библиотеки содержит ссылки на ресурсы библиотеки поддержки в своем файле R.java . Это увеличивает количество идентификатор.

Какова цель int констант из класса R, где эти значения используются? Например, public static final int number_list_item=0x7f04002b; Когда я использую findViewById(), я присваиваю свой вид этой константе. Это какой-то адрес в памяти? Не могли бы вы объяснить, пожалуйста.

Я работаю над небольшим приложением Android Studio (версия 2.2.3). После добавления второго действия с большим количеством компонентов я заметил, что когда я набираю R.id в первом действии, автозаполнение предлагает мне компоненты из второго действия. Это нормально ? И вот рабочий пример моей пробл.

Чтобы обратиться к элементу экрана из кода, нам нужен его ID. Он прописывается либо в Properties, либо в layout-файлах, как вам удобнее. Для ID существует четкий формат - @+id/name, где + означает, что это новый ресурс и он должен добавиться в R.java класс, если он там еще не существует.

Давайте откроем main.xml, для TextView укажем и сохраним


Теперь откроем R.java и видим, что для класса id появилась константа myText. Т.е. чтобы к ней обратиться, надо написать R.id.myText.


Она связана с элементом TextView и мы можем ее использовать, чтобы обратиться к элементу программно. Для этого нам понадобится метод findViewById. Он по ID возвращает View. Давайте напишем вызов этого метода. Напомню, что пока мы пишем наш код в методе onCreate. Это метод, который вызывается при создании Activity. Если вдруг непонятно, куда писать, можно подсмотреть в конец урока, там я выложил код.

Откроем MainActivity.java и после строки с вызовом метода setContentView напишем:

Если View подчеркнуто красным, то скорей всего этот класс не добавлен в секцию import. Нажмите CTRL+SHIFT+O для автоматического обновления импорта.

Теперь myTextView (типа View) – это наш TextView на экране. Но тип View – это предок для TextView (и остальных View-элементов). И он нам не подходит, если мы хотим проделывать операции соответствующие TextView. Поэтому нам необходимо преобразование View в TextView. Изменим наш код на следующий:

Теперь myTextView имеет тип TextView, а результат метода findViewById мы преобразуем из View в TextView. Теперь мы можем применять к myTextView методы класса TextView. Для примера возьмем метод setText. Сейчас отображаемый текст = Hello World, MainActivity!. Мы его программно поменяем на New text in TextView

Сохраняем, запускаем (CTRL+F11) и видим, что текст изменился


Добавим на экран кнопку (Button), текст оставим по умолчанию. Сохраняем - CTRL+SHIFT+S (если не сохранить, то в R.java не появится ID).

Обратите внимание, что у меня совпадает имя объекта и ID


Они друг другу не мешают и так делать даже логичнее. Это остается на ваше усмотрение. Так, кнопку мы нашли, теперь давайте изменим ее текст:

Запустим приложение. Текст на кнопке поменялся, на кнопку можно понажимать, но ничего происходить не будет. Т.к. мы нигде не указывали, что надо делать при нажатии. Этим займемся на следующем уроке. А пока давайте сделаем кнопку неактивной.

Мы поменяли параметр Enabled. Теперь на кнопку нельзя нажать. Сохраним, запустим и убедимся.

Добавим CheckBox, По умолчанию галочка не стоит. Давайте поставим ее программно, для этого используется метод setChecked, который меняет параметр Checked.

Запустив приложение видим, что код сработал.

Как видите – все несложно. Используем метод findViewById, чтобы по ID получить объект соответствующий какому-либо View-элементу (Button, TextView, CheckBox) и далее вызываем необходимые методы объектов (setText, setEnabled, setChecked).

В итоге должен получиться такой код:

На следующем уроке:

- научимся обрабатывать нажатие кнопки

- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

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

Читайте также: