스타일 특성 참조
스타일 특성 리소스는 현재 적용된 테마의 특성 값을 참조할 수 있게 해줍니다. 스타일 특성을 참조하면 하드코드로 작성된 값을 제공하는 대신에 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()를 사용하여 일련의 바이트 스트림을 읽으면 된다.
'X' 카테고리의 다른 글
앱 개발 방법 - 앱 리소스 (Android가 가장 잘 일치하는 리소스를 찾는 방법 [리소스 선택 논리 구조]) (0) | 2022.01.08 |
---|---|
앱 개발 방법 - 앱 리소스 (리소스와 연관된 최선의 기기 호환성 제공) (0) | 2022.01.08 |
앱 개발 방법 - 앱 리소스 (XML에서 리소스 액세스 [XML 리소스로 리소스를 참조하는 데 쓰는 구문, 사용 사례]) (0) | 2022.01.07 |
앱 개발 방법 - 앱 리소스 (코드 내 리소스 액세스 [코드로 리소스를 참조하는 데 쓰는 구문, 사용사례]) (0) | 2022.01.07 |
앱 개발 방법 - 앱 리소스 (액세스) (0) | 2022.01.06 |