В каком файле хранятся строковые ресурсы приложения
Строковые ресурсы предоставляют текстовые строки для вашего приложения с опциональными стилями и форматированием. Существует три типа ресурсов, которые могут предоставлять строки для приложения:
String XML ресурс для предоставления одной строки. String Array XML ресурс для предоставления массива строк. Quantity String (Plurals) XML ресурс, содержащий различные значения строки для множественных чисел.
Ко всем строкам могут применяться стили и форматирование, о них сказано ниже.
String (одиночная строка)
Примечание: строка это простой ресурс, на который можно ссылаться с помощью значения, указанного в атрибуте name (а не с помощью имени XML файла). Поэтому вы можете объединять несколько строковых ресурсов в одном файле внутри элемента <resources> .
Файл может иметь произвольное имя. В качестве идентификатора ресурса используется значение атрибута name .
ТИП РЕСУРСА ПОСЛЕ КОМПИЛЯЦИИ: Указатель на объект типа String. ССЫЛКА НА РЕСУРС:
В Java: R.string.string_name
В XML: @string/string_name
ЭЛЕМЕНТЫ: <resources> Обязательный. Является корневым элементом. Не имеет атрибутов. <string>Строка, которая может включать теги стилизации. Не забывайте экранировать апострофы и кавычки.
name Название строки. Данное значение используется в качестве идентификатора строкового ресурса. ПРИМЕР:
XML файл res/values/strings.xml
Пример использования описанного выше ресурса:
Пример получения строки в коде:
Вы можете использовать методы getString(int) и getText(int) для получения строки. Метод getText(int) возвращает текст со всеми примененными стилями.
String Array (строковый массив)
Описывает массив строк, доступный из приложения.
Примечание: массив строк это простой ресурс, на который можно ссылаться с помощью значения, указанного в атрибуте name (а не с помощью имени XML файла). Поэтому вы можете объединять несколько массивов строк в одном файле внутри элемента <resources> .
Файл может иметь произвольное имя. В качестве идентификатора ресурса используется значение атрибута name .
ТИП РЕСУРСА ПОСЛЕ КОМПИЛЯЦИИ
Указатель на массив объектов типа String.
ССЫЛКА НА РЕСУРС: В Java: R.array.string_array_name СИНТАКСИС:
ЭЛЕМЕНТЫ: <resources> Обязательный. Является корневым элементом. Не имеет атрибутов. <string-array>Описывает массив строк. Включает в себя один или несколько элементов <item> .
name Название массива. Значение используется в качестве идентификатора ресурса. <item> Строка, включающая теги стилизации. В качестве значения может использоваться ссылка на другой строковый ресурс. Должен быть дочерним по отношению к элементу <string-array> . Не забывайте экранировать апострофы и кавычки. Не имеет атрибутов. ПРИМЕР:
XML файл res/values/strings.xml
В коде может использоваться следующим образом:
String [ ] planets = res . getStringArray ( R . array . planets_array ) ;Quantity Strings (Количественные строки)
Правила для написания числа могут быть весьма сложными, поэтому Android предоставляет такие методы, как getQuantityString() для выбора подходящего ресурса.
Примечание: количественные строки это простой ресурс, на который можно ссылаться с помощью значения, указанного в атрибуте name (а не с помощью имени XML файла). Поэтому вы можете объединять несколько количественных строк в одном файле внутри элемента <resources> .
Имя файла может быть произвольным. В качестве идентификатора ресурса используется значение атрибута name .
В подпапках res хранятся различные ресурсы приложения. Мы уже отлично знаем про layout-файлы в папке res/layout. Я упоминал про папку res/drawable с density-суффиксами – в ней хранятся картинки. Теперь обратим внимание на папку res/values. Она предназначена для хранения ресурсов (констант) различных типов. Мы рассмотрим типы String и Color.
Project name: P0111_ResValues
Build Target: Android 2.3.3
Application name: ResValues
Package name: ru.startandroid.develop.resvalues
Create Activity: MainActivity
Откроем файл res/values/strings.xml
Мы видим два элемента типа String:
hello – по умолчанию он использован в свойстве Text в TextView в main.xml. И соответственно TextView отображает значение этого элемента.
app_name – по умолчанию используется как заголовок для приложения и Activity. Это указывается в манифест-файле, который мы еще не разбирали.
На эти элементы можно кликнуть и увидеть справа, что они собой представляют: имя (Name) и значение (Value)
Name – это ID. Оно должно быть уникальным, и для него в R.java создается константа, чтобы мы могли иметь доступ к этому String-элементу.
Если мы посмотрим XML-содержимое файла strings.xml (вкладка снизу – аналогично как для main.xml), то видим, что там все прозрачно и просто. Попробуем и мы использовать ресурсы.
Для начала создадим такой экран в main.xml:
Экран разделен на две одинаковые половины, содержащие LinearLayout, Button и TextView. Для LinearLayout мы укажем фоновый цвет, а для TextView и Button – изменим текст. Реализуем это с помощью ресурсов. Причем View-элементы верхней части мы будем настраивать вручную через properties, а нижнюю часть попробуем настроить программно.
Давайте создадим свой файл с ресурсами в папке values, название пусть будет myres.
После создания открылся редактор файла. Добавлять элемент просто – жмем кнопку Add и выбираем тип, а справа пишем имя и значение. Создадим 4 String-элемента и 2 Color-элемента:
Для практики можете создать вручную, а можете просто вставить этот текст в содержимое myres.xml. Не забудьте сохранить. Заглянем в R.java, убедимся, что здесь все появилось:
Ок, ресурсы созданы, настроим View-элементы на их использование. Сначала верхние:
llTop – в Properties находим свойство Background, жмем кнопку выбора (три точки), в ветке Color выделяем llTopColor и жмем OK
tvTop – для свойства Text откройте окно выбора и найдите там tvTopText.
btnTop - для свойства Text откройте окно выбора и найдите там btnTopText.
Цвет верхней части изменился и тексты поменялись на те, что мы указывали в myres.xml.
Чтобы изменить нижнюю часть, будем кодить. Сначала находим элементы, потом присваиваем им значения.
Обратите внимание на то, что для смены текста используется метод setText. Только это не тот же setText, что мы использовали, когда задавали текст напрямую. Этот на вход принимает ID и мы используем R.java, который хранит ID всех наших ресурсов. Т.е. методы называются одинаково, но на вход принимают разные параметры. Это нормальное явление в Java.
Сохраняем, запускаем и проверяем. Теперь тексты и цвета взяты из файла ресурсов. Вы можете изменить содержимое myres.xml (например текст для верхней кнопки), сохранить, запустить приложение и увидите изменения.
Иногда необходимо в коде получить не ID ресурса, а его значение. Это делается следующим образом:
Выражение вернет текст «Нижний текст», соответствующий String-ресурсу с name = tvBottomText.
Напоследок скажу пару слов об организации файлов для хранения ресурсов. Мы сейчас создали String и Color ресурсы в одном файле myres.xml, но рекомендуется их разделять по разным файлам (например strings.xml, colors.xml . ), и в дальнейшем я буду следовать этой рекомендации. Для этого есть причины, позже мы в этом убедимся.
Имена ресурсов сквозные для всех файлов в папке res/values. Т.е. вы не можете в разных файлах создать ресурс с одним именем и типом.
Имена файлов ресурсов могут быть произвольными и файлов можно создавать сколько угодно. В R.java попадут все ресурсы из этих файлов.
На следующем уроке:
- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
- новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Почти все приложения Android будут иметь некоторые ресурсы. как минимум они часто имеют макеты пользовательского интерфейса в виде XML-файлов. При первом создании приложения Xamarin. Android ресурсы по умолчанию устанавливаются с помощью шаблона проекта Xamarin. Android:
В папке resources были созданы пять файлов, составляющих ресурсы по умолчанию:
Icon.jpg – Значок по умолчанию для приложения
Main. axml – файл макета пользовательского интерфейса по умолчанию для приложения. Обратите внимание, что в Android используется расширение файла .xml , Xamarin. Android использует расширение файла axml .
Strings.xml – Таблица строк для упрощения локализации приложения
AboutResources.txt – Это необязательно и может быть безопасно удалено. Он просто предоставляет общий обзор папки Resources и ее файлов.
Resource. Designer. CS – этот файл автоматически создается и обслуживается с помощью Xamarin. Android и содержит уникальный идентификатор, назначенный каждому ресурсу. Это очень похоже и идентично назначению файлу R. Java, который будет иметь приложение Android, написанное на Java. Оно автоматически создается средствами Xamarin. Android и будет повторно создано с течением времени.
Создание ресурсов и доступ к ним
Создание ресурсов — это просто добавление файлов в каталог для рассматриваемого типа ресурса. На снимке экрана ниже показаны строковые ресурсы для немецких языков, добавленных в проект. При добавлении Strings.xml в файл действие сборки автоматически задается AndroidResource инструментами Xamarin. Android:
Это позволяет средствам Xamarin. Android правильно компилировать и внедрять ресурсы в файл APK. Если по какой-либо причине для действия сборки не задано значение ресурса Android, файлы будут исключены из APK, а любая попытка загрузить или получить доступ к ресурсам приведет к ошибке во время выполнения и произойдет сбой приложения.
Кроме того, важно отметить, что хотя Android поддерживает только имена файлов нижнего регистра для элементов ресурсов, Xamarin. Android немного более терпим отношению; Он будет поддерживать имена файлов в верхнем и нижнем регистре. Для имен образов используется строчная буква с символами подчеркивания в качестве разделителей (например, My _ image _name.jpg). Обратите внимание, что имена ресурсов не могут быть обработаны, если в качестве разделителей используются дефисы или пробелы.
После добавления ресурсов в проект существует два способа использования их в приложении – программным способом (внутри кода) или из XML-файлов.
Программное создание ссылок на ресурсы
Для программного доступа к этим файлам им назначается уникальный идентификатор ресурса. Этот идентификатор ресурса представляет собой целое число, определенное в специальном классе с именем Resource , который находится в файле Resource. Designer. CS, и выглядит примерно так:
Каждый идентификатор ресурса содержится внутри вложенного класса, соответствующего типу ресурса. Например, когда файл Icon.jpg был добавлен в проект, Xamarin. Android обновил Resource класс, создавая вложенный класс Drawable с константой внутри именованного Icon . Это позволяет ссылаться на файл Icon.jpg в коде как Resource.Drawable.Icon . Resource Класс не следует изменять вручную, так как любые изменения, внесенные в него, будут перезаписаны Xamarin. Android.
При ссылке на ресурсы программным способом (в коде) доступ к ним можно получить с помощью иерархии классов Resources, которая использует следующий синтаксис:
PackageName – Пакет, предоставляющий ресурс и необходимый только при использовании ресурсов из других пакетов.
ResourceType – Это тип вложенного ресурса, который находится в классе ресурсов, описанном выше.
Имя ресурса – Это имя файла ресурса (без расширения) или значение атрибута Android: Name для ресурсов, которые находятся в элементе XML.
Ссылки на ресурсы из XML
Доступ к ресурсам в XML-файле осуществляется с помощью специального синтаксиса:
PackageName – пакет, предоставляющий ресурс и необходимый только при использовании ресурсов из других пакетов.
ResourceType – Это тип вложенного ресурса, который находится в классе ресурсов.
Имя ресурса – Это имя файла ресурса (без расширения типа файла) или значение android:name атрибута для ресурсов, которые находятся в элементе XML.
Например, содержимое файла макета Main. axml имеет следующий вид:
Включение строкового содержимого в качестве ресурса дает ряд преимуществ, таких как:
- Он централизует строки, используемые приложением, в одном месте, которым легко управлять (разработчик или не разработчик).
- Строки могут быть определены как ресурс один раз и использоваться во всем коде. Следовательно, оно будет иметь последовательное написание, регистр и пунктуацию.
- Строки можно легко интернационализировать, что позволяет вашему приложению поддерживать несколько языков с помощью одного файла пакета приложения (APK).
- Строки не загромождают код приложения, делая его понятным и простым в обслуживании.
Итак, давайте поговорим о том, как эффективно добавлять строки и, что более важно, ресурсы массива строк в ваши приложения.
Шаг 1. Определите строковые ресурсы для отдельных строк
Строковые ресурсы находятся в файле /res/values/strings.xml. Определите запись строкового ресурса для каждой строки, используемой вашим приложением. Назовите свои строковые ресурсы соответствующим образом. Например, следующий отрывок XML определяет количество типов расы игровых персонажей в виде отдельных строк:
Обратите внимание на префикс «race_» каждого строкового ресурса. Это помогает напомнить членам команды, что эти строки могут быть как-то связаны. Например, они могут использоваться вместе с массивом или отображаться как параметры в элементе управления Spinner.
Шаг 2: Загрузите строковые ресурсы программно
Вы можете легко загрузить строку для использования в своем коде, используя метод getString () класса Resources. Следующий код может быть добавлен в ваш класс Activity для загрузки ресурса String, определенного в вашем приложении:
Удобная вещь о загрузке ресурсов таким способом состоит в том, что если вы предоставили альтернативные ресурсы на разных языках, соответствующая языковая версия строки будет загружена на основе настроек устройства во время выполнения. Никакого специального кода не требуется, чтобы это работало.
Шаг 3. Определение ресурсов строкового массива с использованием ссылок на строковые ресурсы
Теперь предположим, что вы хотите создать массив из этих строк. Конечно, вы можете загрузить их все по отдельности в коде Java и создать массив String в памяти, но вам нужно будет знать каждое из полных имен идентификатора ресурса и ссылаться на него в коде. Вместо этого лучше всего создать ресурс строкового массива, который ссылается на уже созданные вами отдельные строковые ресурсы, связывая их вместе.
Шаг 4: Загрузите ресурсы строкового массива программно
Вы можете легко загрузить массив строк для использования в своем коде, используя метод getStringArray () класса Resources. Следующий код может быть добавлен в ваш класс Activity для загрузки ресурса массива, определенного в вашем приложении:
String[] cRaces = getResources().getStringArray(R.array.races_array);Шаг 5: Ссылки на ресурсы массива в элементах управления Spinner
Использование ресурсов строкового массива позволяет пропустить шаги подключения адаптера данных к вашему элементу управления. Например, простой элемент управления Spinner или раскрывающийся список можно заполнить ресурсом строкового массива, не беспокоясь об изнурительных адаптерах. Вы просто добавляете элемент управления Spinner в свой файл макета и устанавливаете его атрибут android: records для созданного вами массива строк, и все готово. Например:
Это определяет элемент управления Spinner, который будет показывать каждую из строк расы персонажа в качестве параметров, как показано на рисунке 1.
В вашем классе Activity теперь вы можете реализовать OnItemSelectedListener для захвата, когда пользователь выбирает определенную расу символов, например так:
Spinner cRaceSpinner = (Spinner) findViewById(R.id.spinnerOfCharacterRaces); cRaceSpinner.setOnItemSelectedListener(new OnItemSelectedListener() < public void onItemSelected(AdapterView<?> arg0, View arg1,arg2, long arg3) < String strChosenRace = (String) arg0.getItemAtPosition(arg2);Здесь мы просто реагируем каждый раз, когда выбран элемент в Spinner. Мы ищем данные, выбранные с помощью метода getItemAtPosition (), который, в случае ресурса строкового массива, является самими строковыми данными.
Вывод
Нет абсолютно никакой причины определять строки и массивы строк, встроенных в код. Строки и массивы строк принадлежат вашим ресурсам приложений Android, не загромождая вашу элегантную Java. Хранение строковых данных в файлах ресурсов дает ряд преимуществ, включая лучшую организацию и упрощение интернационализации. Строковые массивы являются еще более мощными, когда они состоят из ссылок на строковые ресурсы вместо необработанных строковых данных. Ресурсы строкового массива можно приклеить ко многим элементам управления пользовательского интерфейса, которые, как правило, полагаются на адаптеры данных без особых хлопот, что делает ваш код еще более читаемым и обслуживаемым.
Читайте также: