Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Почти все приложения Android будут иметь в них некоторые ресурсы; по крайней мере они часто имеют макеты пользовательского интерфейса в виде XML-файлов. При первом создании приложения Xamarin.Android ресурсы по умолчанию настраиваются шаблоном проекта Xamarin.Android:
Пять файлов, составляющих ресурсы по умолчанию, были созданы в папке Resources:
Icon.png — значок по умолчанию для приложения
Main.axml — файл макета пользовательского интерфейса по умолчанию для приложения. Обратите внимание, что в то время как Android использует расширение .xml файла, Xamarin.Android использует расширение AXML-файла.
Strings.xml — строка таблицы для локализации приложения
AboutResources.txt — это не обязательно и может быть безопасно удалено. Он просто предоставляет общий обзор папки ресурсов и файлов в ней.
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.png). Обратите внимание, что имена ресурсов нельзя обрабатывать, если дефисы или пробелы используются в качестве разделителей.
После добавления ресурсов в проект существует два способа их использования в приложении — программно (внутри кода) или из XML-файлов.
Ссылки на ресурсы программным способом
Для доступа к этим файлам программным способом им назначается уникальный идентификатор ресурса. Этот идентификатор ресурса представляет собой целое число, определенное в специальном классе Resource
, который находится в файле Resource.designer.cs, и выглядит примерно так:
public partial class Resource
{
public partial class Attribute
{
}
public partial class Drawable {
public const int Icon=0x7f020000;
}
public partial class Id
{
public const int Textview=0x7f050000;
}
public partial class Layout
{
public const int Main=0x7f030000;
}
public partial class String
{
public const int App_Name=0x7f040001;
public const int Hello=0x7f040000;
}
}
Каждый идентификатор ресурса содержится внутри вложенного класса, соответствующего типу ресурса. Например, когда файл Icon.png был добавлен в проект, Xamarin.Android обновил Resource
класс, создав вложенный класс, вызываемый Drawable
константой внутри с именем Icon
.
Это позволяет называть файл Icon.png в коде Resource.Drawable.Icon
. Resource
Класс не должен быть изменен вручную, так как любые изменения, внесенные в него, будут перезаписаны Xamarin.Android.
При программном обращении к ресурсам (в коде) их можно получить через иерархию классов Resources, которая использует следующий синтаксис:
[<PackageName>.]Resource.<ResourceType>.<ResourceName>
PackageName — пакет, который предоставляет ресурс и требуется только при использовании ресурсов из других пакетов.
ResourceType — это вложенный тип ресурса, который находится в классе ресурсов, описанному выше.
Имя ресурса — это имя файла ресурса (без расширения) или значение атрибута android:name для ресурсов, которые находятся в XML-элементе.
Ссылка на ресурсы из XML
Доступ к ресурсам в XML-файле выполняется по следующему специальному синтаксису:
@[<PackageName>:]<ResourceType>/<ResourceName>
PackageName — пакет, который предоставляет ресурс и требуется только при использовании ресурсов из других пакетов.
ResourceType — это вложенный тип ресурса, который находится в классе Resource.
Имя ресурса — это имя файла ресурса (без расширения типа файла) или значение атрибута
android:name
для ресурсов, которые находятся в XML-элементе.
Например, содержимое файла макета Main.axml выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/myImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/flag" />
</LinearLayout>
В этом примере имеется ImageView
флаг с именем рисуемого ресурса. У ImageView
него задано значение src
@drawable/flag
атрибута. При запуске действия Android будет выглядеть внутри каталога Resource/Drawable для файла с именем flag.png (расширение файла может быть другим форматом изображения, например flag.jpg) и загрузить этот файл и отобразить его в файле ImageView
.
При запуске этого приложения будет выглядеть примерно следующее изображение: