본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] xml 의  tool 을 사용하자

by 돼지왕 왕돼지 2017. 5. 30.
반응형

 [android] xml 의  tool 을 사용하자



https://medium.com/sebs-top-tips/tools-of-the-trade-part-1-f3c1c73de898

https://developer.android.com/studio/write/tool-attributes.html


@ SuppressWarning, @ TargetApi, aapt, AbsListVIew, actionbar, Android, android asset packaging tool, android studio, annotation, apk, Category, CONTEXT, footer, fragment tag, Gridview, header, holo-based theme, http://schemas.android.com/tools, ignore, inflate, layout, lint analysis, lint attribute, list, listfooter, listheader, listitem, listview, listview item, locale, mapping, Material Theme, Menu, merge, namespace tool, onCreateOptionsMenu, oncreateview, override, Pane, pre draw, Preview, preview pane, proofreading, Resource, root, root node, spell checking 에러, Standard, SuppressWarning, tabs, targetapi, Theme, theme.appcompat, Tool, Tools, tools attribute, tools:actionBarNavMode, tools:context, tools:ignore, tools:layout, tools:listfooter, tools:listheader, tools:listitem, tools:locale, tools:menu, tools:showIn, tools:targetapi, UI, ui attribute, ui preview, xml, xml preview, xmlns:tools, [android] xml 의  tool 을 사용하자, 수혜



-

xmlns:tools="http://schemas.android.com/tools"


aapt 는 tools: attribute 를 ignore 한다.

그래서 실제 apk 에는 들어가지 않는다.



-

<TextView

     ...

     tools:text=“I am a title”/>


위와 같이 tools: 를 사용하면 실제 xml 에서 pre draw 할 때는 tools:text 가 android:text 처럼 작동하지만,

apk 는 들어가지 않는다. aapt( android asset packaging tool ) 가 무시하므로



-

tools attribute 는 2개의 category 로 나눠질 수 있다.

첫 카테고리는 Lint analysis 에 영향을 미치고,

두번째 카테고리는 UI 표시에 영향을 미친다.



-

Lint attribute 는 tools:ignore / tools:targetApi / tools:locale 이 있다.



-

tools:ignore 는 Java 의 @SuppressWarning annotation 과 같은 역할이다.


<ImageView

     ...

     tools:ignore=“contentDescription” />



-

tools:targetApi 는 Java 의 @TargetApi annotation 과 같은 역할이다.


<ripple 

     ...

     tools:targetApi=“LOLLIPOP” />



-

tools:locale 은 어떤 locale 을 target 으로 resource 를 mapping 할지 정한다.

아래와 같이 values/strings.xml 에 들어가는 내용물이 영어가 아닌 경우..

즉 app 을 영문이 아닌 버전으로 작성할 경우 locale 을 명시해주면 proofreading 을 하지 않아서 spell checking 에러를 내뿜지 않는다.


<resources

     tools:locale=“kr”>

     ...

</resources>



-

UI attribute 는 xml preview 에 영향을 미치는 것이다.







-

tools:context 는 view 를 inflate 할 때 사용할 activity 를 지정할 수 있다.

이 녀석을 지정해서 가장 큰 수혜는 바로 해당 activity 에 적용된 theme 을 확인할 수 있다는 것!!


onCreateOptionsMenu 가 정의되어 있다면, 이 함수를 보고 Menu 도 보여준다.


<LinearLayout

     xmlns:android="http://schemas.android.com/apk/res/android"

     xmlns:tools="http://schemas.android.com/tools"

     ...

     tools:context="com.android.example.MainActivity">



-

tools:menu 는 preview pane 에서 menu 항목을 미리 보여주는 것이다.

layout 의 root node 에 적용해야 한다.


기본적으로 context 가 선택되어 있다면, 해당 activity 의 onCreateOptionsMenu 함수를 보고 메뉴를 적용한다.


onCreateOptionsMenu 를 override 하는 목적으로 사용되는 녀석이 이 menu attribute 이다.


tools:menu="menu_main, menu_edit”

위와 같이 하면 onCreateOptionsMenu 안의 코드를 무시하고, 2개의 메뉴가 표시된다.


단!! 이 녀석은 Theme.AppCompat 을 사용할 경우에는 지원되지 않는다.



-

tools:actionBarNavMode 는 standard, tabs, list.

이 녀석도 Theme.AppCompat 과 Material Theme 에는 작동하지 않는다.



-

AbsListVIew 를 사용하는 경우 listitem, listheader, listfooter 등을 명시할 수 있다.


<ListView

     ...

     tools:listheader="@layout/list_header"

     tools:listitem="@layout/list_item"

     tools:listfooter="@layout/list_footer" />


GridView 는 header, footer 가 작동하지 않는다.



-

tools:layout attribute 는 fragment tag 에 layout 을 표시하는 효과를 준다.

( onCreateView 에서 inflate 하는 녀석을 연결해주면 된다. )



-

tools:showIn attribute 는 다른 xml 에서 include 되었을 때 view 를 그리는 데 사용된다.

이 녀석은 merge 가 root 로 사용될 때 유용하다.


<merge

     ...

     tools:showIn="@layout/activity_main">





반응형

댓글