6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

도구 속성 참조

Android 스튜디오에서 지원하는 tools 네임스페이스의 다양한 XML 속성으로 디자인-시간 기능(예: 프래그먼트에 표시할 레이아웃) 또는 컴파일-시간 동작(예: XML 리소스에 적용할 축소 모드)을 사용 설정할 수 있습니다. 앱을 빌드할 때 빌드 도구는 이러한 속성을 삭제하므로 APK 크기 또는 런타임 동작에 영향을 미치지 않습니다.

이러한 속성을 사용하려면 아래와 같이 속성을 사용할 각 XML 파일의 루트 요소에 tools 네임스페이스를 추가합니다.

    <RootTag xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools" >
    

오류 처리 속성

다음 속성은 린트 경고 메시지를 숨기는 데 도움이 됩니다.

tools:ignore

사용 대상: 모든 요소

사용 주체: 린트

이 속성은 도구가 현재 요소 또는 모든 하위 요소에서 무시하려는 린트 문제 ID를 쉼표로 구분된 목록으로 허용합니다.

예를 들어, 도구에 MissingTranslation 오류를 무시하라고 알려줄 수 있습니다.

<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>
    

tools:targetApi

사용 대상: 모든 요소

사용 주체: 린트

이 속성은 요소를 지원하는 API 수준(정수 또는 코드명)을 지정할 수 있는 자바 코드의 @TargetApi 주석과 동일하게 적용됩니다.

이 속성은 이 요소와 모든 하위 요소가 특정 API 수준 이상에서만 사용된다고 도구에 알려줍니다. 이 속성을 사용하면 minSdkVersion으로 지정한 API 수준에서 관련 요소 또는 요소의 속성을 사용할 수 없는 경우 발생하는 린트 경고가 중단됩니다.

예를 들어, GridLayout이 API 수준 14 이상에서만 사용할 수 있고 그보다 낮은 버전에서는 사용되지 않는다는 것을 알고 있기 때문에 이 속성을 사용할 수도 있습니다.

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:targetApi="14" >
    

그러나 대신 지원 라이브러리에서 제공하는 GridLayout을 사용해야 합니다.

tools:locale

사용 대상: <resources>

사용 주체: 린트, Android 스튜디오 편집기

이 속성은 지정된 <resources> 요소의 리소스에 어떤 기본 언어가 사용되는지 도구에 알려(그러지 않으면 도구가 영어라고 가정하므로) 맞춤법 검사기에서 경고가 표시되지 않게 합니다. 이 값은 유효한 언어 한정자여야 합니다.

예를 들어, 이 속성을 values/strings.xml 파일(기본 문자열 값)에 추가하여 기본 문자열에 영어가 아닌 스페인어가 사용된다고 나타낼 수 있습니다.

<resources xmlns:tools="http://schemas.android.com/tools"
        tools:locale="es">
    

디자인-시간 뷰 속성

다음 속성은 Android 스튜디오 레이아웃 미리보기에서만 보이는 레이아웃 특성을 정의합니다.

android: 대신 tools:

사용 대상: <View>

사용 주체: Android 스튜디오 Layout Editor

Android 프레임워크에서 모든 <View> 속성을 android: 대신 tools: 접두어와 함께 사용하여 레이아웃 미리보기에 샘플 데이터를 삽입할 수 있습니다. 이 속성은 속성값이 런타임까지 게재되지 않지만 레이아웃 미리보기에서 미리 효과를 보고 싶을 때 유용합니다.

예를 들어, android:text 속성값이 런타임에 설정되었거나 기본값과 다른 값이 있는 레이아웃을 보려면 tools:text를 추가하여 레이아웃 미리보기 전용으로 일부 텍스트를 지정하면 됩니다.

그림 1. tools:text 속성이 'Google Voice'를 레이아웃 미리보기 값으로 설정함

android: 네임스페이스 속성(런타임에 사용됨)과 그에 일치하는 tools: 속성(레이아웃 미리보기에서만 런타임 속성을 재정의함)을 모두 추가할 수 있습니다.

또한, tools: 속성을 사용하여 레이아웃 미리보기에서만 속성을 해제할 수도 있습니다. 예를 들어, 여러 개의 하위 요소를 가진 FrameLayout이 있지만 레이아웃 미리보기에서 하나의 하위 요소만 보고 싶은 경우 아래와 같이 레이아웃 미리보기에서 하위 요소 중 하나를 보이지 않도록 설정할 수 있습니다.

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="First" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Second"
        tools:visibility="invisible"  />
    

디자인 보기에서 Layout Editor를 사용할 때 Properties 창에서도 일부 디자인-시간 뷰 속성을 편집할 수 있습니다. 각 디자인-시간 속성은 같은 이름을 가진 실제 속성과 구별하기 위해 속성 이름 옆에 공구 모양 아이콘 이 표시됩니다.

tools:context

사용 대상: 모든 루트 <View>

사용 주체: 린트, Android 스튜디오 Layout Editor

이 속성은 레이아웃과 기본적으로 연결된 활동을 선언합니다. 이 속성을 통해 활동에 관한 지식(예: 미리보기에 필요한 레이아웃 테마 및 빠른 수정 메뉴(그림 2)에서 핸들러를 만들 때 onClick 핸들러를 삽입하는 위치)이 필요한 기능을 편집기나 레이아웃 미리보기에서 사용할 수 있습니다.

그림 2. onClick 속성의 빠른 수정 메뉴는 tools:context를 설정한 경우에만 작동함

활동 클래스 이름은 manifest 파일과 동일한 점 접두어를 사용하여 지정할 수 있습니다(전체 패키지 이름 제외). 예:

<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context=".MainActivity" >
    

팁: Layout Editor 툴바에서 레이아웃 미리보기의 테마도 선택할 수 있습니다.

tools:itemCount

사용 대상: <RecyclerView>

사용 주체: Android 스튜디오 Layout Editor

이 속성은 Layout Editor가 Preview 창에서 렌더링해야 하는 RecyclerView의 항목 수를 지정합니다.

예:

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:itemCount="3"/>
    

tools:layout

사용 대상: <fragment>

사용 주체: Android 스튜디오 Layout Editor

이 속성은 레이아웃 미리보기에서 프래그먼트 안에 그리려고 하는 레이아웃을 선언합니다(레이아웃 미리보기는 일반적으로 레이아웃을 적용하는 활동 코드를 실행할 수 없기 때문).

예:

<fragment android:name="com.example.master.ItemListFragment"
        tools:layout="@layout/list_content" />
    

tools:listitem / tools:listheader / tools:listfooter

사용 대상: <AdapterView>(<ListView> 같은 서브클래스 포함)

사용 주체: Android 스튜디오 Layout Editor

이 속성은 목록의 항목, 헤더 및 바닥글을 위해 레이아웃 미리보기에 보여줄 레이아웃을 지정합니다. 목록의 항목이 반복되지 않도록 레이아웃의 모든 데이터 필드는 숫자 콘텐츠(예: Item 1)로 채워집니다.

예:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/sample_list_item"
        tools:listheader="@layout/sample_list_header"
        tools:listfooter="@layout/sample_list_footer" />
    

tools:showIn

사용 대상: <include>에 의해 참조되는 레이아웃의 모든 루트 <View>

사용 주체: Android 스튜디오 Layout Editor

이 속성을 사용하여 이 레이아웃을 include로 사용하는 레이아웃을 가리킬 수 있으며, 따라서 상위 요소 레이아웃에 삽입되는 동안 이 파일이 표시될 때 미리 보고 편집할 수 있습니다.

예:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:showIn="@layout/activity_main" />
    

이제 레이아웃 미리보기에서는 activity_main 레이아웃 안에 나타나는 TextView 레이아웃이 표시됩니다.

tools:menu

사용 대상: 모든 루트 <View>

사용 주체: Android 스튜디오 Layout Editor

이 속성은 레이아웃 미리보기에서 앱 바에 표시해야 하는 메뉴를 지정합니다. 속성값은 하나 이상의 메뉴 ID이며 쉼표로 구분됩니다(@menu/ 또는 이런 종류의 ID 접두어 및 .xml 확장자 없음). 예:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:menu="menu1,menu2" />
    

tools:minValue / tools:maxValue

사용 대상: <NumberPicker>

사용 주체: Android 스튜디오 Layout Editor

이 속성은 NumberPicker 뷰의 최솟값과 최댓값을 설정합니다.

예:

<NumberPicker xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/numberPicker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:minValue="0"
        tools:maxValue="10" />
    

tools:openDrawer

사용 대상: <DrawerLayout>

사용 주체: Android 스튜디오 Layout Editor

이 속성을 사용하여 Layout Editor의 Preview 창에서 DrawerLayout을 열 수 있습니다. 다음 값 중 하나를 전달하여 Layout Editor에서 레이아웃을 렌더링하는 방법을 수정할 수도 있습니다.

상수설명
종료800005객체 크기를 변경하지 않고 객체를 컨테이너 끝으로 푸시합니다.
왼쪽3객체 크기를 변경하지 않고 객체를 컨테이너 왼쪽으로 푸시합니다.
오른쪽5객체 크기를 변경하지 않고 객체를 컨테이너 오른쪽으로 푸시합니다.
시작800003객체 크기를 변경하지 않고 객체를 컨테이너 맨 앞으로 푸시합니다.

예:

<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:openDrawer="start" />
    

"@tools:sample/*" 리소스

사용 대상: UI 텍스트 또는 이미지를 지원하는 모든 뷰

사용 주체: Android 스튜디오 Layout Editor

이 속성을 사용하여 자리표시자 데이터 또는 이미지를 뷰에 삽입할 수 있습니다. 예를 들어, 레이아웃이 텍스트와 함께 동작하는 방법을 테스트하고 싶지만 아직 앱의 UI 텍스트를 마무리하지 못했다면 다음과 같이 자리표시자 텍스트를 사용할 수 있습니다.

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="@tools:sample/lorem" />
    

아래 표는 레이아웃에 삽입할 수 있는 자리표시자 데이터의 유형을 설명합니다.

속성값자리표시자 데이터 설명
@tools:sample/full_names @tools:sample/first_names@tools:sample/last_names의 조합에서 무작위로 생성된 전체 이름
@tools:sample/first_names 일반 이름
@tools:sample/last_names 일반 성
@tools:sample/cities 전 세계 도시 이름
@tools:sample/us_zipcodes 무작위로 생성된 미국 우편번호
@tools:sample/us_phones 무작위로 생성된 (800) 555-xxxx 형식의 전화번호
@tools:sample/lorem 라틴어에서 파생된 자리표시자 텍스트
@tools:sample/date/day_of_week 특정 형식을 위해 무작위로 지정된 날짜 및 시간
@tools:sample/date/ddmmyy
@tools:sample/date/mmddyy
@tools:sample/date/hhmm
@tools:sample/date/hhmmss
@tools:sample/avatars 프로필 아바타로 사용할 수 있는 벡터 드로어블
@tools:sample/backgrounds/scenic 배경으로 사용할 수 있는 이미지

리소스 축소 속성

다음 속성을 사용하면 리소스 축소를 사용할 때 엄격한 참조 검사를 할 수 있고 특정 리소스의 유지 또는 삭제 여부를 선언할 수 있습니다.

리소스 축소를 사용하려면 build.gradle 파일에서 shrinkResources 속성을 true로 설정합니다(코드 축소의 경우 minifyEnabled도 설정). 예:

android {
        ...
        buildTypes {
            release {
                shrinkResources true
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'),
                        'proguard-rules.pro'
            }
        }
    }
    

tools:shrinkMode

사용 대상: <resources>

사용 주체: 리소스 축소를 사용하는 빌드 도구

이 속성을 사용하여 빌드 도구에서 '안전 모드'(리소스를 안전하게 재생하면서 명시적으로 인용되고 Resources.getIdentifier() 호출을 이용하여 동적으로 참조될 수 있는 모든 리소스를 유지함) 또는 '엄격 모드'(코드나 다른 리소스에서 명시적으로 인용된 리소스만 유지함) 중 어느 것을 사용할지 지정할 수 있습니다.

기본값은 안전 모드(shrinkMode="safe")를 사용하는 것입니다. 대신 엄격 모드를 사용하려면 아래와 같이 <resources> 태그에 shrinkMode="strict"를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:shrinkMode="strict" />
    

엄격 모드를 사용하는 경우 삭제되었지만 실제로 사용하고 싶은 리소스를 유지하기 위해 tools:keep을, 명시적으로 더 많은 리소스를 삭제하기 위해 tools:discard를 사용해야 할 수도 있습니다.

자세한 내용은 리소스 축소를 참조하세요.

tools:keep

사용 대상: <resources>

사용 주체: 리소스 축소를 사용하는 빌드 도구

리소스 축소를 사용하여 미사용 리소스를 삭제하는 경우 이 속성을 사용하면 유지할 리소스를 지정할 수 있습니다(일반적으로 이러한 리소스는 동적으로 생성된 리소스 이름을 Resources.getIdentifier()에 전달하는 등의 방식으로 런타임에 간접적으로 참조되기 때문).

이 속성을 사용하려면 <resources> 태그가 있는 리소스 디렉터리(예: res/raw/keep.xml)에 XML 파일을 만들고 유지할 각 리소스를 tools:keep 속성에 쉼표로 구분된 목록으로 지정합니다. 별표 문자를 와일드카드로 사용할 수 있습니다. 예:

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:keep="@layout/used_1,@layout/used_2,@layout/*_3" />
    

자세한 내용은 리소스 축소를 참조하세요.

tools:discard

사용 대상: <resources>

사용 주체: 리소스 축소를 사용하는 빌드 도구

리소스 축소를 사용하여 미사용 리소스를 제거하는 경우 이 속성을 사용하면 수동으로 삭제할 리소스를 지정할 수 있습니다(일반적으로 이러한 리소스는 참조되지만 앱에 영향을 미치지는 않거나, 이 리소스가 참조된다고 Gradle 플러그인에서 잘못 추론했기 때문).

이 속성을 사용하려면 <resources> 태그가 있는 리소스 디렉터리(예: res/raw/keep.xml)에 XML 파일을 만들고 유지할 각 리소스를 tools:discard 속성에 쉼표로 구분된 목록으로 지정합니다. 별표 문자를 와일드카드로 사용할 수 있습니다. 예:

<?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:tools="http://schemas.android.com/tools"
        tools:discard="@layout/unused_1" />
    

자세한 내용은 리소스 축소를 참조하세요.