brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Dec 04. 2017

Tools Attributes Reference

Android Tools Namespace

Tools Attributes Reference


Android Studio는 디자인 타임 기능 (Design-time features)
또는 컴파일 타임 동작 (compile-time behaviors)을 가능하게 하는
다양한 XML 속성을 tools namespace에서 지원합니다.


디자인 타임 기능 : 디자인 모드에서 구성 요소와 컨트롤의 동작 및 표시하는 기능.
ex) fragment에서 표시할 레이아웃
컴파일 타임 동작 : 컴파일러에 의해 수행되는 동작.
ex) XML 리소스에 축소 모드를 적용하는 것


이러한 속성을 이용하려면 아래와 같이 tools namespace를 XML 파일의 root 요소에 추가해야 합니다.

#01 tools namespace


Tools 속성들에 대해서 알아보겠습니다.




Error handling attributes


Lint 경고 메시지와 관련된 속성입니다.




#01 tools:ignore


특정 요소에 대한 Lint 검사를 비활성화할 수 있습니다.

#02 tools:ignore


CardView에서 UnusedResources Lint 검사를 비활성화할 수 있습니다.

CardView에 선언하면 하위 요소인 ImageView, TextView 모두에도 UnusedResources Lint 검사가 비활성화됩니다.

tools:ignore="UnusedResources"


쉼표(,)를 이용해서 여러 개의 Lint 검사를 비활성화할 수 있습니다.

tools:ignore="NewApi, StringFormatInvalid"


모든 Lint 검사를 비활성화할 수도 있습니다.

tools:ignore="all"





#02 tools:targetApi


Java 코드의 @TargetApi 주석과 동일하게 작동합니다. 이 요소를 지원하는 API 레벨 (정수 또는 코드 이름)을 지정할 수 있습니다.

#03 tools:targetApi


#04 GridLayout

예를 들어, GridLayout은 API 레벨 14 이상에서만 이용할 수 있기 때문에 targetApi를 14로 지정해야 합니다.








#03 tools:locale


Lint 맞춤법 검사기의 경고 메시지를 방지 위해 resources에 대한 기본 언어/로케일을 지정할 수 있습니다.


예를 들어, "¡Hola!"는 "안녕하세요"라는 의미를 가진 에스파냐어입니다.

이를 resources에 추가하면, 안드로이드의 기본 resource는 영어이기 때문에 아래와 같이 맞춤법 검사기의 경고 메시지가 나타납니다.

#05 Spell checker.


이를 방지하기 위해 아래와 같이 locale을 에스파냐어인 "es"로 등록하면 됩니다.

#06 tools:locale





Design-time view attributes


Android Studio 레이아웃 미리보기에서만 볼 수 있는 레이아웃 특성을 정의하는 속성입니다.




#01 tools:instead of android:


레이아웃 미리보기에 샘플 데이터를 삽입할 수 있습니다.


<View> 속성의 "android:" namespace 대신 "tools:" namespace로 변경만 하면 됩니다.

이 기능을 이용하면 런타임에서 속성 값을 채우지 않아도 레이아웃 미리보기에서 먼저 그 결과를 확인할 수 있습니다.


예를 들어, "android:text" 대신 "tools:text"를 이용하면 레이아웃 미리 보기에서 값이 적용된 View를 볼 수 있습니다.

tool 속성은 앱을 빌드될 때 제거되므로 APK 크기 또는 런타임 동작에 전혀 영향을 미치지 않습니다.

#07 tools:instead of android:


#08 android and tools

만약 "android:text"와 "tools:text"를 동시에 쓰면, 미리보기에서는 "tools:text" 값이 적용되어 보입니다.







#02 tools:context


해당 레이아웃과 연동된 Activity를 선언합니다.

이를 통해 Activity에 대한 정보가 필요한 editor 또는 레이아웃 미리보기의 기능을 사용할 수 있습니다.


예를 들어, 아래와 같이 ImageView에 onClick이라는 이벤트를 XML 속성에 등록하면 quickfix 기능이 기본적으로 MainActivity로 연동되어 있습니다.

#09 tools:context





#03 tools:layout


fragment를 레이아웃 미리보기에서 볼 수 있습니다.

#10 tools:layout


일반적으로 fragment는 XML에 정의해도 미리보기에서 보이지 않습니다.

tools:layout 속성을 이용하면 해당 fragment를 미리보기에서 볼 수 있습니다.





#04 tools:listitem / tools:listheader / tools:listfooter


리스트의 item, header, footer를 미리 보여 줄 수 있습니다.

#11 tools:listitem





#05 tools:showIn


해당 레이아웃이 상위 레이아웃에 포함된 상태로 미리보기 할 수 있습니다.


왼쪽과 같이 fragment XML 미리보기를 하면 fragment만 볼 수 있는데, 이 속성을 이용하면 오른쪽처럼 activity에 포함된 상태로 미리 볼 수 있습니다.

#12 tools:showIn





Resource shrinking attributes


다음 속성을 사용하면 엄격한 참조 확인을 활성화하고 리소스 축소를 사용할 때 특정 리소스를 유지할지 또는 폐기할지 여부를 선언할 수 있습니다.

쉽게 말해서 안 쓰는 리소스를 알아서 제거해줍니다.

여기서 말하는 리소스는 values/ 폴더에 정의된 리소스들(문자열, 치수, 스타일 및 색상 등)을 제외한 리소스입니다.


#13 build.gradle




#01 tools:shrinkMode


이 속성을 이용하면 리소스 축소 모드(shrinkMode)를 지정할 수 있습니다.

엄격 모드(strict mode) : 코드나 다른 리소스에 명시 적으로 참조된 리소스만 유지

안전 모드(safe mode) : 엄격 모드 + 코드가 Resources.getIdentifier()를 호출하여 동적으로 참조될 수 있는 모든 리소스를 유지


기본값은 안전 모드(shrinkMode = "safe")이기 때문에 엄격 모드를 이용하려면 다음과 같이 <resources> 태그에 shrinkMode = "strict"를 추가해야 합니다.

이 파일을 프로젝트 리소스에 저장합니다(예: res/raw/keep.xml에 저장).
빌드는 이 파일을 APK에 패키징 하지 않습니다.
#14 tools:shrinkMode





#02 tools:keep


리소스 축소를 이용할 때 삭제하지 않고 유지할 리소스를 지정할 수 있습니다.

#15 tools:keep





#03 tools:discard


리소스 축소를 이용할 때 수동으로 삭제할 리소스를 지정할 수 있습니다.

#16 tools:discard








Tools 속성이 뭔지 잘 몰랐는데 디자인 타임 기능을 활용하면 개발하기 많이 편해질 거 같습니다.

앱을 빌드할 때 Tools 속성은 자동으로 제거되므로 APK 크기 또는 런타임 동작에 영향을 미치지 않습니다.

앞으로 많이 씁시다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari