Android 리소스 기본 사항Android Resource Basics

거의 모든 Android 응용 프로그램에는 일종의 리소스가 있습니다. 최소한 사용자 인터페이스 레이아웃이 XML 파일 형식으로 포함 되어 있는 경우가 많습니다.Almost all Android applications will have some sort of resources in them; at a minimum they often have the user interface layouts in the form of XML files. Xamarin Android 응용 프로그램을 처음 만들 때 Xamarin.ios 프로젝트 템플릿에서 기본 리소스를 설정 합니다.When a Xamarin.Android application is first created, default resources are setup by the Xamarin.Android project template:

기본 리소스를 구성 하는 5 개의 파일이 Resources 폴더에 만들어집니다.The five files that make up the default resources were created in the Resources folder:

  • 아이콘 .png – 응용 프로그램의 기본 아이콘Icon.png – The default icon for the application

  • Main. axml – 응용 프로그램의 기본 사용자 인터페이스 레이아웃 파일입니다.Main.axml – The default user interface layout file for an application. Android에서 .xml 파일 확장명을 사용 하는 동안 xamarin.ios는 . axml 파일 확장명을 사용 합니다.Note that while Android uses the .xml file extension, Xamarin.Android uses the .axml file extension.

  • 문자열 .xml – 응용 프로그램의 지역화에 도움이 되는 문자열 테이블Strings.xml – A string table to help with localization of the application

  • AboutResources이는 필요 하지 않으며 안전 하 게 삭제할 수 있습니다. –AboutResources.txt – This is not necessary and may safely be deleted. 리소스 폴더 및 그 안에 있는 파일에 대 한 높은 수준의 개요를 제공 합니다.It just provides a high level overview of the Resources folder and the files in it.

  • Resource.designer.cs– 이 파일은 자동으로 생성 되 고 xamarin.ios에서 유지 관리 되며 각 리소스에 할당 된 고유 ID를 보유 합니다.Resource.designer.cs – This file is automatically generated and maintained by Xamarin.Android and holds the unique ID's assigned to each resource. 이는 Java 응용 프로그램에서 Java로 작성 한 R 파일에 대해 매우 비슷하며 동일한 용도입니다.This is very similar and identical in purpose to the R.java file that an Android application written in Java would have. Xamarin Android 도구를 통해 자동으로 생성 되며, 시간에 따라 다시 생성 됩니다.It is automatically created by the Xamarin.Android tools and will be regenerated from time to time.

리소스 만들기 및 액세스Creating and Accessing Resources

리소스를 만드는 것은 문제의 리소스 종류에 대 한 디렉터리에 파일을 추가 하는 것 만큼 간단 합니다.Creating resources is as simple as adding files to the directory for the resource type in question. 아래 스크린샷은 독일어 로캘에 대 한 문자열 리소스를 프로젝트에 추가 하는 방법을 보여 줍니다.The screen shot below shows string resources for German locales were added to a project. .Xml이 파일에 추가 되 면 빌드 작업이 xamarin.ios 도구에 의해 Androidresource 로 자동 설정 됩니다 .When Strings.xml was added to the file, the Build Action was automatically set to AndroidResource by the Xamarin.Android tools:

이를 통해 Xamarin Android 도구를 사용 하 여 리소스를 APK 파일에 올바르게 컴파일하고 포함할 수 있습니다.This allows the Xamarin.Android tools to properly compile and embed the resources in to the APK file. 어떤 이유로 든 빌드 작업Android 리소스로설정 하지 않으면 파일이 apk에서 제외 되 고, 리소스를 로드 하거나 액세스 하려고 하면 런타임 오류가 발생 하 고 응용 프로그램의 작동이 중단 됩니다.If for some reason the Build Action is not set to Android Resource, then the files will be excluded from the APK, and any attempt to load or access the resources will result in a run-time error and the application will crash.

또한 Android는 리소스 항목에 대해 소문자 파일 이름만 지원 하는 반면, Xamarin. Android는 약간 더 많은 기능을 제공 합니다. 대문자 및 소문자 파일을 모두 지원 합니다.Also, it's important to note that while Android only supports lowercase filenames for resource items, Xamarin.Android is a bit more forgiving; it will support both uppercase and lowercase filenames. 이미지 이름에 대 한 규칙은 밑줄을 구분 기호로 사용 하는 소문자 (예 :_my_image name .png)를 사용 하는 것입니다.The convention for image names is to use lowercase with underscores as separators (for example, my_image_name.png). 대시 또는 공백을 구분 기호로 사용 하는 경우에는 리소스 이름을 처리할 수 없습니다.Note that resource names cannot be processed if dashes or spaces are used as separators.

리소스를 프로젝트에 추가한 후에는 응용 프로그램 – 에서 프로그래밍 방식으로 (코드 내부) 또는 XML 파일에서 두 가지 방법을 사용할 수 있습니다.Once resources have been added to a project, there are two ways to use them in an application – programmatically (inside code) or from XML files.

프로그래밍 방식으로 리소스 참조Referencing Resources Programmatically

이러한 파일에 프로그래밍 방식으로 액세스 하기 위해 고유한 리소스 ID가 할당 됩니다.To access these files programmatically, they are assigned a unique resource ID. 이 리소스 ID는 Resource Resource.designer.cs파일에 있는 라는 특수 클래스에서 정의 되는 정수 이며 다음과 같습니다.This resource ID is an integer defined in a special class called Resource, which is found in the file Resource.designer.cs, and looks something like this:

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;
    }
}

각 리소스 ID는 리소스 형식에 해당 하는 중첩 된 클래스 내부에 포함 되어 있습니다.Each resource ID is contained inside a nested class that corresponds to the resource type. 예를 들어 파일 아이콘 .png 가 프로젝트에 추가 되 면 xamarin.ios는 Resource 클래스를 업데이트 하 여 라는 Icon내에 상수를 사용 하 여 Drawable 라는 중첩 클래스를 만듭니다.For example, when the file Icon.png was added to the project, Xamarin.Android updated the Resource class, creating a nested class called Drawable with a constant inside named Icon. 이렇게 하면 파일 아이콘 .png 를 코드에서로 Resource.Drawable.Icon참조할 수 있습니다.This allows the file Icon.png to be referred to in code as Resource.Drawable.Icon. 클래스 Resource 는 수동으로 편집 하면 안 됩니다. 해당 클래스에 대 한 변경 내용은 xamarin.ios에서 덮어쓰게 됩니다.The Resource class should not be manually edited, as any changes that are made to it will be overwritten by Xamarin.Android.

프로그래밍 방식으로 리소스를 참조 하는 경우 (코드에서) 다음 구문을 사용 하는 Resources 클래스 계층을 통해 액세스할 수 있습니다.When referencing resources programmatically (in code), they can be accessed via the Resources class hierarchy which uses the following syntax:

[<PackageName>.]Resource.<ResourceType>.<ResourceName>
  • PackageName – 리소스를 제공 하는 패키지는 다른 패키지의 리소스를 사용 하는 경우에만 필요 합니다.PackageName – The package which is providing the resource and is only required when resources from other packages are being used.

  • ResourceType – 이는 위에 설명 된 리소스 클래스 내에 있는 중첩 된 리소스 형식입니다.ResourceType – This is the nested resource type that is within the Resource class described above.

  • 리소스 이름 – 리소스의 파일 이름 (확장명 없음) 또는 XML 요소에 있는 리소스에 대 한 android: name 특성 값입니다.Resource Name – this is the filename of the resource (without the extension) or the value of the android:name attribute for resources that are in an XML element.

XML에서 리소스 참조Referencing Resources from XML

XML 파일의 리소스는 다음과 같은 특별 한 구문으로 액세스 됩니다.Resources in an XML file are accessed by a following a special syntax:

@[<PackageName>:]<ResourceType>/<ResourceName>
  • PackageName – 리소스를 제공 하는 패키지는 다른 패키지의 리소스를 사용 하는 경우에만 필요 합니다.PackageName – the package which is providing the resource and is only required when resources from other packages are being used.

  • ResourceType – 이는 리소스 클래스 내에 있는 중첩 된 리소스 형식입니다.ResourceType – This is the nested resource type that is within the Resource class.

  • 리소스 이름 이 파일은 리소스 (파일 형식 확장명없음 )의 파일 이름 이거나 XML 요소에 있는 리소스 android:name 에 대 한 특성의 값입니다. –Resource Name – this is the filename of the resource (without the file type extension) or the value of the android:name attribute for resources that are in an XML element.

예를 들어, 주. axml레이아웃 파일의 내용은 다음과 같습니다.For example the contents of a layout file, Main.axml, are as follows:

<?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 플래그가 지정 된 플래그를 사용 해야 하는가 있습니다.This example has an ImageView that requires a drawable resource named flag. ImageView src 특성이 로@drawable/flag설정 되어 있습니다.The ImageView has its src attribute set to @drawable/flag. 활동이 시작 되 면 Android는 디렉터리 리소스/그릴 수 있는 파일에 대 한 이미지를 표시 합니다. 즉, 파일 확장명은 플래그 ImageView .png 와 같은 다른 이미지 형식일 수 있습니다. 파일을 로드 하 여에 표시할 수 있습니다.When the activity starts, Android will look inside the directory Resource/Drawable for a file named flag.png (the file extension could be another image format, like flag.jpg) and load that file and display it in the ImageView. 이 응용 프로그램을 실행 하면 다음 이미지와 같이 표시 됩니다.When this application is run, it would look something like the following image:

지역화 된 ImageView