상세 컨텐츠

본문 제목

앱 개발 방법 - 앱 리소스 (스타일 특성 참조 [원본 파일 액세스, 플랫폼 리소스 액세스])

안드로이드 프로그래밍/앱 리소스

by green post it 2022. 1. 8. 13:40

본문

반응형

스타일 특성 참조

스타일 특성 리소스는 현재 적용된 테마의 특성 값을 참조할 수 있게 해줍니다. 스타일 특성을 참조하면 하드코드로 작성된 값을 제공하는 대신에 UI 요소의 외관을 사용자가 지정하여 현재 테마에서 제공한 표준 변형에 맞추어 스타일링할 수 있습니다. 스타일 특성을 참조하는 것은 기본적으로 "이 특성이 정의한 스타일을 현재 테마로 사용하라"는 말과 같습니다.

 

스타일 특성을 참조하는 경우 이름 구문은 일반적인 리소스 형식과 거의 똑같습니다. 다만 앳 기호(@)를 사용하는 대신 물음표(?)를 사용하며 리소스 유형 부분이 선택 사항이라는 점만 다릅니다.

?[<package_name>:][<resource_type>/]<resource_name>

예컨대 다음은 텍스트 색상을 시스템 테마의 "기본"텍스트 색상에 일치하도록 설정하기 위해 특성을 참조하는 방법을 나타냅니다.

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

여기서 android:textColor 특성이 현재 테마에 스타일 특성의 이름을 지정합니다. Android는 이제 android:textColorSecondary 스타일 특성에 적용된 값을 이 위젯의 android:textColor에 대한 값으로 사용합니다. 시스템 리소스 도구는 특성 리소스가 이 컨텍스트에서 예상된다는 것을 알기 때문에 유형(?android:attr/textColorSecondary)을 명시적으로 선언하지 않아도 됩니다. 즉 attr 유형은 배제해도 됩니다.

원본 파일 액세스

흔한 일은 아니지만 원본 파일과 디렉토리에 액세스해야 하는 경우가 있습니다. 이 경우에는 res/에 파일을 저장하더라도 소용이 없습니다. res/에서 리소스를 읽는 방법은 리소스 ID를 사용하는 것뿐이기 때문입니다. 대신 assets/디렉토리에 리소스를 저장할 수 있습니다.

 

assets/디렉토리에 저장된 파일은 리소스 ID가 부여되지 않으므로 이와 같은 리소스 R 클래스나 XML 리소스에서 참조할 수 없습니다. 그 대신 일반 파일 시스템처럼 assets/디렉토리에 파일을 쿼리하고 AaaetManager를 사용하여 원시 데이터를 읽을 수 있습니다.

 

하지만 원시 데이터(예:동영상, 오디오 파일)를 읽는 기능만 필요한 경우라면 파일을 res/raw/디렉토리에 저장한 다음 openRawResource()를 사용하여 일련의 바이트 스트림을 읽으면 됩니다.

플랫폼 리소스 액세스

Android에는 스타일 테마 및 레이아웃 등 여러 가지 표준 리소스가 포함되어 있습니다. 이와 같은 리소스에 액세스하려면 android 패키지 이름으로 리소스 참조를 한정합니다. 예를 들어 Android는 ListAdapter의 목록 항목으로 사용할 수 있는 레이아웃 리소스를 제공합니다.

 

Java

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

Kotlin

listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)

이 예시에서 simple_list_item_1은 ListView의 항목에 대해 플랫폼이 정의한 레이아웃 리소스입니다. 목록 항목에 대해 나름의 레이아웃을 만드는 대신 이것을 사용해도 됩니다.

 

스타일 특성 참조는 현재 테마에서 제공한 표준 변형에 맞추어 스타일링할 수 있다.
얘 : ?[<package_name>:][<resource_type>/]<resource_name> = ?android:textColorSecondary

원본 파일 액세스 assets/디렉토리에 리소스를 저장할 수 있다. assets/디렉토리에 저장된 리소스는 리소스 ID가 제공되지 않는다. AaaetManager로 데이터를 읽을 수 있다.

동영상, 오디오 파일 처럼 읽는 기능만 필요하다면 res/raw/디렉토리에 저장 후 openRawResource()를 사용하여 일련의 바이트 스트림을 읽으면 된다.
반응형

관련글 더보기