Android 리소스 기본 사항

거의 모든 Android 애플리케이션에는 일종의 리소스가 있습니다. 최소한 XML 파일 형식의 사용자 인터페이스 레이아웃이 있는 경우가 많습니다. Xamarin.Android 애플리케이션을 처음 만들 때 기본 리소스는 Xamarin.Android 프로젝트 템플릿에 의해 설정됩니다.

기본 리소스를 구성하는 5개의 파일이 Resources 폴더에 만들어졌습니다.

  • Icon.png – 애플리케이션의 기본 아이콘

  • Main.axml – 애플리케이션의 기본 사용자 인터페이스 레이아웃 파일입니다. Android는 .xml 파일 확장자를 사용하지만 Xamarin.Android는 .axml 파일 확장자를 사용합니다.

  • Strings.xml – 애플리케이션의 지역화에 도움이 되는 문자열 테이블

  • AboutResources.txt – 이 작업은 필요하지 않으며 안전하게 삭제할 수 있습니다. 리소스 폴더 및 해당 폴더의 파일에 대한 개략적인 개요만 제공합니다.

  • Resource.designer.cs – 이 파일은 Xamarin.Android에서 자동으로 생성되고 기본 각 리소스에 할당된 고유 ID를 보유합니다. 이는 Java로 작성된 Android 애플리케이션에 있는 R.java 파일과 매우 유사하고 의도적으로 동일합니다. Xamarin.Android 도구에서 자동으로 만들어지고 때때로 다시 생성됩니다.

리소스 만들기 및 액세스

리소스를 만드는 것은 문제의 리소스 종류에 대한 디렉터리에 파일을 추가하는 것만큼 간단합니다. 아래 스크린샷은 프로젝트에 추가된 독일 로캘의 문자열 리소스를 보여 줍니다. Strings.xml 파일에 추가되면 빌드 작업은 Xamarin.Android 도구에 의해 AndroidResource로 자동으로 설정됩니다.

이렇게 하면 Xamarin.Android 도구가 리소스를 제대로 컴파일하고 APK 파일에 포함할 수 있습니다. 어떤 이유로 빌드 작업이 Android 리소스설정되지 않은 경우 파일이 APK에서 제외되고 리소스를 로드하거나 액세스하려고 하면 런타임 오류가 발생하며 애플리케이션이 충돌합니다.

또한 Android는 리소스 항목에 대한 소문자 파일 이름만 지원하지만 Xamarin.Android는 좀 더 용서합니다. 대문자와 소문자 파일 이름을 모두 지원합니다. 이미지 이름에 대한 규칙은 밑줄이 있는 소문자를 구분 기호로 사용하는 것입니다(예 : my_image_name.png). 대시 또는 공백을 구분 기호로 사용하는 경우 리소스 이름을 처리할 수 없습니다.

프로젝트에 리소스를 추가한 후에는 프로그래밍 방식으로(코드 내부) 또는 XML 파일에서 두 가지 방법으로 사용할 수 있습니다.

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

이러한 파일에 프로그래밍 방식으로 액세스하려면 고유한 리소스 ID가 할당됩니다. 이 리소스 ID는 파일 Resource.designer.cs 있는 특수 클래스Resource에 정의된 정수이며 다음과 같습니다.

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는 리소스 종류에 해당하는 중첩 클래스 내에 포함됩니다. 예를 들어 파일 Icon.png 프로젝트에 추가되었을 때 Xamarin.Android는 클래스를 업데이트 Resource 하여 이름이 지정된 Icon상수로 호출 Drawable 되는 중첩 클래스를 만들었습니다. 이렇게 하면 코드Resource.Drawable.Icon에서 파일 Icon.png 참조할 수 있습니다. 클래스에 Resource 대한 변경 내용은 Xamarin.Android에서 덮어쓰여지기 때문에 수동으로 편집해서는 안 됩니다.

프로그래밍 방식으로(코드에서) 리소스를 참조하는 경우 다음 구문을 사용하는 Resources 클래스 계층 구조를 통해 액세스할 수 있습니다.

[<PackageName>.]Resource.<ResourceType>.<ResourceName>
  • PackageName – 리소스를 제공하고 다른 패키지의 리소스를 사용하는 경우에만 필요한 패키지입니다.

  • ResourceType – 위에서 설명한 리소스 클래스 내에 있는 중첩된 리소스 종류입니다.

  • 리소스 이름 – 확장명 없이 리소스의 파일 이름 또는 XML 요소에 있는 리소스의 android:name 특성 값입니다.

XML에서 리소스 참조

XML 파일의 리소스는 다음과 같은 특수 구문에 의해 액세스됩니다.

@[<PackageName>:]<ResourceType>/<ResourceName>
  • PackageName – 리소스를 제공하고 다른 패키지의 리소스를 사용하는 경우에만 필요한 패키지입니다.

  • ResourceType – 리소스 클래스 내에 있는 중첩된 리소스 종류입니다.

  • 리소스 이름 – 파일 형식 확장명 없이 리소스의 파일 이름 또는 XML 요소에 있는 리소스에 대한 특성 값 android:name 입니다.

예를 들어 레이아웃 파일의 내용인 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 플래그라는 그리기 가능한 리소스가 필요합니다. 해당 특성이 ImageViewsrc .로 설정되어 있습니다 @drawable/flag. 작업이 시작되면 Android는 디렉터리 리소스/그리기 가능 파일 내에서 flag.png(파일 확장명은 flag.jpg 같은 다른 이미지 형식일 수 있음) 해당 파일을 로드하고 해당 파일에 표시ImageView합니다. 이 애플리케이션이 실행되면 다음 이미지와 같이 표시됩니다.

Localized ImageView