Tools屬性

Android Studio 支持 tools 命名空間中的多種 XML 屬性芒粹,這些屬性支持設(shè)計(jì)時(shí)功能(例如要在 Fragment 中顯示哪種布局)或編譯時(shí)行為(例如要對(duì) XML 資源應(yīng)用哪種壓縮模式)。在您構(gòu)建應(yīng)用時(shí)大溜,編譯工具會(huì)移除這些屬性化漆,因此它們不會(huì)對(duì) APK 大小或運(yùn)行時(shí)行為產(chǎn)生影響。

要使用這些屬性钦奋,請(qǐng)將 tools 命名空間添加到您要在其中使用他們的各個(gè) XML 文件的根元素中座云,如下所示:

錯(cuò)誤處理屬性

以下屬性可幫助抑制 Lint 警告消息。

  • tools:ignore
    適用于:任何元素
    使用者:Lint
    此屬性用于接受您希望工具針對(duì)相應(yīng)元素或它的任何子元素忽略的 Lint 問題 ID 的逗號(hào)分隔列表付材。
    例如朦拖,您可以告知工具忽略 MissingTranslation 錯(cuò)誤:
<string name="show_all_apps" tools:ignore="MissingTranslation">All</string>    
  • tools:targetApi
    適用于:任何元素
    使用者:Lint
    此屬性的工作方式與 Java 代碼中的 @TargetApi 注解相同:通過它,您可以指定支持相應(yīng)元素的 API 級(jí)別(指定為整數(shù)或代號(hào))厌衔。
    它會(huì)告知工具您認(rèn)為該元素(及任何子元素)將只能在指定的 API 級(jí)別或更高級(jí)別中使用璧帝。這樣,如果該元素或其屬性在您指定為 minSdkVersion 的 API 級(jí)別中不可用富寿,Lint 將不會(huì)向您發(fā)出警告睬隶。
    例如,GridLayout 只能在 API 級(jí)別 14 及更高級(jí)別中使用页徐,但您知道此布局不會(huì)用于任何更低版本苏潜,在這種情況下,您就可以使用此屬性:
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"       
xmlns:tools="http://schemas.android.com/tools"       
tools:targetApi="14" >    

但是泞坦,您應(yīng)該使用支持庫中的 GridLayout

  • tools:locale
    適用于:<resources>
    使用者:Lint窖贤、Android Studio 編輯器
    此屬性用于告知工具用于給定 <resources> 元素中各項(xiàng)資源的默認(rèn)語言/語言區(qū)域(因?yàn)楣ぞ邥?huì)假設(shè)為英語)砖顷,以免拼寫檢查工具發(fā)出警告贰锁。值必須是有效的語言區(qū)域限定符
    例如滤蝠,您可以將此屬性添加到 values/strings.xml 文件(默認(rèn)字符串值)中豌熄,以指明用于默認(rèn)字符串的語言是西班牙語,而不是英語物咳。
    <resources xmlns:tools="http://schemas.android.com/tools"        
    tools:locale="es">    
    
設(shè)計(jì)時(shí)視圖屬性

以下屬性定義了僅會(huì)在 Android Studio 布局預(yù)覽中看到的布局特性锣险。

  • tools: 代替 android:
    適用于:<View>
    使用者:Android Studio 布局編輯器
    您可以通過將 tools: 前綴(而不是 android:)與 Android 框架中的任意 <View> 屬性搭配使用,在布局預(yù)覽中插入示例數(shù)據(jù)。此屬性在以下情況下很有用:在運(yùn)行時(shí)之前芯肤,屬性的值不會(huì)填充巷折,但您希望提前在布局預(yù)覽中看到效果。
    例如崖咨,如果 android:text 屬性值在運(yùn)行時(shí)設(shè)置锻拘,或您希望在布局中看到默認(rèn)值以外的值,則可以添加 tools:text击蹲,以便指定一些僅在布局預(yù)覽中顯示的文本署拟。
    **圖 1.** `tools:text` 屬性將“Google Voice”設(shè)置為在布局預(yù)覽中顯示的值

    您可以同時(shí)添加 android: 命名空間屬性(在運(yùn)行時(shí)使用)和匹配的 tools: 屬性(會(huì)替換僅在布局預(yù)覽中顯示的運(yùn)行時(shí)屬性)。

您還可以使用 tools: 屬性來取消將某屬性設(shè)置為僅用于布局預(yù)覽歌豺。例如推穷,如果您擁有的 FrameLayout 包含多個(gè)子元素,但您希望僅在布局預(yù)覽中看到一個(gè)子元素类咧,則可以將其中一個(gè)子元素設(shè)置為在布局預(yù)覽中不可見馒铃,如下所示:

 <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"** /> 

在設(shè)計(jì)視圖中使用布局編輯器時(shí),您還可以通過 Properties 窗口修改部分設(shè)計(jì)時(shí)視圖屬性痕惋。每個(gè)設(shè)計(jì)時(shí)屬性都用屬性名稱旁邊的扳手圖標(biāo)進(jìn)行指示骗露,以便與同名的真實(shí)屬性區(qū)分開。

  • tools:context</devsite-heading>
    適用于:任何根 <View>
    使用者:Lint血巍、Android Studio 布局編輯器
    此屬性用于聲明相應(yīng)布局默認(rèn)與哪個(gè) Activity 相關(guān)聯(lián)萧锉。這會(huì)在編輯器或布局預(yù)覽中啟用具有以下特征的功能:需要了解相應(yīng) Activity 的信息,例如預(yù)覽中的布局主題應(yīng)該是什么述寡,以及通過快速修復(fù)創(chuàng)建 onClick 處理程序時(shí)將其插入到什么位置(圖 2)柿隙。
    **圖 2.** 只有在您設(shè)置了 `tools:context` 時(shí),`onClick` 屬性的快速修復(fù)功能才會(huì)工作鲫凶。

    您可以使用清單文件中所用的同一點(diǎn)前綴指定 Activity 類名稱(不包括完整的軟件包名稱)禀崖。例如:
    <android.support.constraint.ConstraintLayout  
        xmlns:android="http://schemas.android.com/apk/res/android"      
        xmlns:tools="http://schemas.android.com/tools"                
        tools:context=".MainActivity" >    
    

提示:您還可以從布局編輯器工具欄中選擇布局預(yù)覽的主題。

  • tools:itemCount
    適用于:<RecyclerView>
    使用者:Android Studio 布局編輯器
    對(duì)于給定的 RecyclerView螟炫,此屬性會(huì)指定布局編輯器應(yīng)該在 Preview 窗口中呈現(xiàn)的內(nèi)容數(shù)量波附。
    例如:

    <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 Studio 布局編輯器
    此屬性用于聲明您希望布局預(yù)覽在 Fragment 內(nèi)繪制的布局(因?yàn)椴季诸A(yù)覽無法執(zhí)行正常情況下會(huì)應(yīng)用布局的 Activity 代碼)。
    例如:

        <fragment 
            android:name="com.example.master.ItemListFragment"        
            tools:layout="@layout/list_content" />    
    
  • tools:listitem / tools:listheader / tools:listfooter
    適用于:<AdapterView>(以及 <ListView> 等子類)
    使用者:Android Studio 布局編輯器
    這些屬性用于指定要在列表的項(xiàng)目昼钻、標(biāo)題和頁腳布局預(yù)覽中顯示的布局掸屡。布局中的任何數(shù)據(jù)字段都填充有數(shù)字內(nèi)容(例如“Item 1”),以確保列表的項(xiàng)目不會(huì)重復(fù)然评。
    例如:

    <!----->
    <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" />    
    

    注意:這些屬性不適用于 Android Studio 2.2 中的 ListView仅财,不過在 Android Studio 2.3 中,該問題(問題 215172)已修復(fù)碗淌。

  • tools:showIn
    適用于:<include> 引用的布局中的任何根 <View>
    使用者:Android Studio 布局編輯器
    通過此屬性盏求,您可以指向將相應(yīng)布局用作內(nèi)含布局的布局抖锥,以便在它出現(xiàn)并嵌入到其父級(jí)布局中時(shí)預(yù)覽(和修改)此文件。
    例如:

    <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" />    
    

現(xiàn)在當(dāng)此 TextView 布局出現(xiàn)在 activity_main 布局內(nèi)部時(shí)碎罚,布局預(yù)覽中會(huì)進(jìn)行顯示磅废。

  • tools:menu

適用于:任何根 <View>
使用者:Android Studio 布局編輯器
此屬性用于指定布局預(yù)覽應(yīng)該在應(yīng)用欄中顯示的菜單。值可以是一個(gè)或多個(gè)菜單 ID荆烈,以英文逗號(hào)分隔(不帶 @menu/ 或任何此類 ID 前綴还蹲,且不帶 .xml 擴(kuò)展名)。例如:

<?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</devsite-heading>
    適用于:<NumberPicker>
    使用者:Android Studio 布局編輯器
    這些屬性用于設(shè)置 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</devsite-heading>
    適用于:<DrawerLayout>
    使用者:Android Studio 布局編輯器
    通過此屬性谜喊,您可以在布局編輯器的 Preview 窗格中打開 [DrawerLayout](https://developer.android.google.cn/reference/androidx/drawerlayout/widget/DrawerLayout.html)。您還可以通過傳遞以下任一值修改布局編輯器呈現(xiàn)布局的方式:
    | 常量 | 值 | 說明 |
    | --- | --- | --- |
    | 結(jié)尾 | 800005 | 將對(duì)象推送到其容器的結(jié)尾倦始,不更改其大小斗遏。 |
    | 左側(cè) | 3 | 將對(duì)象推送到其容器的左側(cè),不更改其大小鞋邑。 |
    | 右側(cè) | 5 | 將對(duì)象推送到其容器的右側(cè)诵次,不更改其大小。 |
    | 開頭 | 800003 | 將對(duì)象推送到其容器的開頭枚碗,不更改其大小逾一。 |
    例如:

    <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/*" 資源</devsite-heading>
    適用于:支持界面文本或圖片的任何視圖。
    使用者:Android Studio 布局編輯器
    通過此屬性肮雨,您可以將占位符數(shù)據(jù)或圖片注入到視圖中遵堵。例如,如果您需要測(cè)試布局在采用文本時(shí)的行為怨规,但尚未最終確定應(yīng)用的界面文本陌宿,則可以使用占位符文本,如下所示:

    <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" />    
    

    下表列出了可以注入到布局中的占位符數(shù)據(jù)的類型波丰。

    屬性值 占位符數(shù)據(jù)說明
    @tools:sample/full_names @tools:sample/first_names@tools:sample/last_names 的組合中隨機(jī)生成的全名壳坪。
    @tools:sample/first_names 常見名字。
    @tools:sample/last_names 常見姓氏掰烟。
    @tools:sample/cities 世界各地的城市名稱爽蝴。
    @tools:sample/us_zipcodes 隨機(jī)生成的美國(guó)郵政編碼。
    @tools:sample/us_phones 隨機(jī)生成的電話號(hào)碼纫骑,格式如下:(800) 555-xxxx蝎亚。
    @tools:sample/lorem 源自拉丁語的占位符文本。
    @tools:sample/date/day_of_week 指定格式的隨機(jī)日期和時(shí)間惧磺。
    @tools:sample/date/ddmmyy
    @tools:sample/date/mmddyy
    @tools:sample/date/hhmm
    @tools:sample/date/hhmmss
    @tools:sample/avatars 可用作個(gè)人資料頭像的矢量可繪制對(duì)象颖对。
    @tools:sample/backgrounds/scenic 可用作背景的圖片。
資源壓縮屬性

通過以下屬性磨隘,您可以啟用嚴(yán)格引用檢查缤底,并在使用資源壓縮時(shí)聲明保留還是舍棄某些資源。
要啟用資源壓縮番捂,請(qǐng)?jiān)?build.gradle 文件中將 shrinkResources 屬性(以及適用于代碼壓縮的 minifyEnabled)設(shè)置為 true个唧。例如:

android {        
    ...        
    buildTypes {            
        release {                
            shrinkResources true                
            minifyEnabled true   
            proguardFiles getDefaultProguardFile('proguard-android.txt'),  'proguard-rules.pro'            
        }        
    }    
}    
  • tools:shrinkMode
    適用于:<resources>
    使用者:具有資源壓縮功能的編譯工具
    通過此屬性,您可以指定編譯工具應(yīng)該使用“安全模式”(謹(jǐn)慎行事设预,保留所有明確引用的資源徙歼,以及可以通過調(diào)用 Resources.getIdentifier() 動(dòng)態(tài)引用的資源)還是“嚴(yán)格模式”(僅保留代碼或其他資源中明確引用的資源)。

    默認(rèn)使用“安全模式”(shrinkMode="safe")鳖枕。要改為使用“嚴(yán)格模式”孽鸡,請(qǐng)將 shrinkMode="strict" 添加到 <resources> 標(biāo)記份乒,如下所示:

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

    啟用“嚴(yán)格模式”后,您可能需要使用 tools:keep 來保留已移除但您實(shí)際上需要的資源,并使用 tools:discard 來明確移除更多資源估盘。
    如需了解詳情,請(qǐng)參閱壓縮資源怖亭。

  • tools:keep
    適用于:<resources>
    使用者:具有資源壓縮功能的編譯工具
    使用資源壓縮功能移除不使用的資源時(shí)及穗,您可以通過此屬性指定要保留的資源(通常情況下,原因是:相應(yīng)資源在運(yùn)行時(shí)以間接方式被引用哄褒,例如通過將動(dòng)態(tài)生成的資源名稱傳遞給 Resources.getIdentifier())稀蟋。

    要使用,請(qǐng)?jiān)谫Y源目錄中創(chuàng)建一個(gè)具有 <resources> 標(biāo)記的 XML 文件(例如呐赡,在 res/raw/keep.xml處)退客,并將要保留在 tools:keep 屬性中的各項(xiàng)資源指定為逗號(hào)分隔列表。您可以將星號(hào)字符用作通配符链嘀。例如:

    <?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" />    
    

    如需了解詳情井辜,請(qǐng)參閱壓縮資源

  • tools:discard
    適用于:<resources>
    使用者:具有資源壓縮功能的編譯工具
    使用資源壓縮功能刪除不使用的資源時(shí)管闷,您可以通過此屬性指定要手動(dòng)舍棄的資源(通常情況下粥脚,原因是:相應(yīng)資源被引用,但引用方式不會(huì)影響您的應(yīng)用包个,或者 Gradle 插件錯(cuò)誤地推導(dǎo)出相應(yīng)資源被引用)刷允。
    要使用,請(qǐng)?jiān)谫Y源目錄中創(chuàng)建一個(gè)具有 <resources> 標(biāo)記的 XML 文件(例如碧囊,在 res/raw/keep.xml處)树灶,并將要保留在 tools:discard 屬性中的各項(xiàng)資源指定為逗號(hào)分隔列表。您可以將星號(hào)字符用作通配符糯而。例如:

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

    如需了解詳情天通,請(qǐng)參閱壓縮資源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熄驼,一起剝皮案震驚了整個(gè)濱河市像寒,隨后出現(xiàn)的幾起案子烘豹,更是在濱河造成了極大的恐慌,老刑警劉巖诺祸,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件携悯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡筷笨,警方通過查閱死者的電腦和手機(jī)憔鬼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胃夏,“玉大人轴或,你說我怎么就攤上這事⊙鲑鳎” “怎么了照雁?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)悼瘾。 經(jīng)常有香客問我囊榜,道長(zhǎng),這世上最難降的妖魔是什么亥宿? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任卸勺,我火速辦了婚禮,結(jié)果婚禮上烫扼,老公的妹妹穿的比我還像新娘曙求。我一直安慰自己,他們只是感情好映企,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布悟狱。 她就那樣靜靜地躺著,像睡著了一般堰氓。 火紅的嫁衣襯著肌膚如雪挤渐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天双絮,我揣著相機(jī)與錄音浴麻,去河邊找鬼。 笑死囤攀,一個(gè)胖子當(dāng)著我的面吹牛软免,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焚挠,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼膏萧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起榛泛,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蝌蹂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后挟鸠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叉信,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亩冬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年艘希,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硅急。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡覆享,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出营袜,到底是詐尸還是另有隱情撒顿,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布荚板,位于F島的核電站凤壁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跪另。R本人自食惡果不足惜拧抖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望免绿。 院中可真熱鬧唧席,春花似錦、人聲如沸嘲驾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辽故。三九已至徒仓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間誊垢,已是汗流浹背掉弛。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彤枢,地道東北人狰晚。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缴啡,于是被迫代替她去往敵國(guó)和親壁晒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容