tools 強(qiáng)大的功能

一炎码、tools 命名空間的作用有哪些郑叠?

根據(jù)官方文檔描述孙技,根據(jù)其屬性的功能類別产禾,大致有三種主要功能:
  1. 這些屬性支持設(shè)計(jì)時(shí)功能(例如,在片段中顯示哪種布局)
  2. 編譯時(shí)行為(例如應(yīng)用于XML資源的縮小模式)
  3. 構(gòu)建應(yīng)用程序時(shí)牵啦,構(gòu)建工具會(huì)刪除這些屬性亚情,因此不會(huì)影響APK大小或運(yùn)行時(shí)行為。
說的通俗一點(diǎn)就是:
  1. 減少或者避免黃線提示哈雏,讓代碼更清爽楞件,讓編譯少報(bào)錯(cuò)
  2. 讓預(yù)覽界面更靈活,可以隨心所欲的定制預(yù)覽視圖
  3. 壓縮資源文件僧著,降低APK體積。
    https://developer.android.google.cn/studio/write/tool-attributes.html

二障簿、布局編輯器設(shè)計(jì)時(shí)View屬性

tools:替換android:
tools可以覆蓋所有的android屬性盹愚,相信這個(gè)是大家用過的最多的,就不說了站故。

tools:itemCount
用于: <RecyclerView>
使用者:Android Studio布局編輯器
對(duì)于給定的RecyclerView皆怕,此屬性指定布局編輯器應(yīng)在“ 預(yù)覽”窗口中呈現(xiàn)的項(xiàng)目數(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ù)覽在片段內(nèi)繪制的布局(因?yàn)椴季诸A(yù)覽無(wú)法執(zhí)行通常應(yīng)用布局的活動(dòng)代碼)西篓。
例如:

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

tools:showIn
用于:<View>由布局引用的 任何根<include>
使用者:Android Studio布局編輯器
此屬性允許您指向將此布局用作包含的布局愈腾,因此您可以預(yù)覽(和編輯)此文件,因?yàn)樗谇度肫涓覆季謺r(shí)顯示岂津。
例如:

<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)在布局預(yù)覽顯示了這個(gè)TextView布局虱黄,因?yàn)樗霈F(xiàn)的內(nèi)部 activity_main布局。
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
用于: <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:sample/*" resources
適用于:支持UI文本或圖像的任何視圖泳叠。
使用者:Android Studio布局編輯器
此屬性允許您將占位符數(shù)據(jù)或圖像注入視圖。例如茶宵,如果要測(cè)試布局在文本中的行為方式危纫,但尚未為應(yīng)用程序確定最終的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" />

下表描述了可以注入布局的占位符數(shù)據(jù)的類型种蝶。


image.png

這些placeholder資源不會(huì)打進(jìn)APK包里面契耿,因此不用擔(dān)心會(huì)增加app體積,只是方便在preview窗口查看預(yù)覽效果蛤吓。

三宵喂、Sample Data

即 樣本數(shù)據(jù) 功能,可以通過 @tools:sample 來使用該屬性会傲,也屬于 design-time view attributes锅棕。

但它并非只是一個(gè)屬性那么簡(jiǎn)單,更應(yīng)該算是一個(gè)“工具利器”淌山,所以會(huì)將其單獨(dú)拿出來詳細(xì)介紹裸燎。這個(gè)工具是本年度 Google 大會(huì)上 Android 開發(fā)團(tuán)隊(duì)特別介紹的一個(gè)新推屬性。

它有什么用呢泼疑?用處大了德绿!先前的布局預(yù)覽使用的數(shù)據(jù)都是我們直接在布局控件中注明或者在 strings.xml 文件中給出的,這一就會(huì)產(chǎn)生一些臟數(shù)據(jù)退渗,不利于我們后期的處理移稳。

而有了 sample data,我們就可以對(duì)布局預(yù)覽器中的 “樣本數(shù)據(jù)”進(jìn)行集中保存和管理了会油。

1. sample data 的使用

可以直接使用系統(tǒng)提供的


image.png

上述表格中不僅有常用文本數(shù)據(jù)和日期等數(shù)據(jù)个粱,還提供了一些圖片樣本數(shù)據(jù),那么該如何使用呢翻翩?很簡(jiǎn)單都许,只需要切換到布局預(yù)覽界面,并拖動(dòng)一個(gè) ImageView 到面板上嫂冻,然后 Android studio 就會(huì)彈出如下界面:


image.png

然后選擇 avatars 或者 background/scenic 數(shù)據(jù)源就可以了胶征。當(dāng)然你也可以通過 xml 代碼形式來設(shè)置:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:srcCompat="@tools:sample/avatars[12]" />

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:ellipsize="end"
        android:maxLines="4"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/imageView"
        tools:text="@tools:sample/lorem/random" />
</android.support.constraint.ConstraintLayout>

同樣地,TextView 也可以通過 @tools:sample/lorem/random 來添加樣本數(shù)據(jù)桨仿,如此一來睛低,效果如下:


image.png

2. 自定義 sample data

如果我們想要是用自己定制化的樣例數(shù)據(jù),該如何做呢服傍?其實(shí)很簡(jiǎn)單暇昂,只需要在 app 目錄下創(chuàng)建 sample data directory 就可以了:


image.png

接下來,我們就可以在里面定制我們自己的數(shù)據(jù)了伴嗡,在剛建好的 sampledata 目錄下新建一個(gè) txt 格式的數(shù)據(jù)文件急波,如 users,然后在里面創(chuàng)建如下數(shù)據(jù):


image.png
<TextView
        android:id="@+id/name2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:ellipsize="end"
        android:maxLines="7"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="@id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/imageView"
        app:layout_constraintTop_toBottomOf="@id/name"
        tools:text="@sample/users" />
image.png

通過配置json來實(shí)現(xiàn)數(shù)據(jù)顯示

{
  "data": [
    {
      "name": "aa",
      "name2": "11"
    },
    {
      "name": "bb",
      "name2": "11"
    },
    {
      "name": "cc",
      "name2": "11"
    },
    {
      "name": "dd",
      "name2": "11"
    },
    {
      "name": "ee",
      "name2": "11"
    },
    {
      "name": "ff",
      "name2": "11"
    },
    {
      "name": "gg",
      "name2": "11"
    },
    {
      "name": "hh",
      "name2": "11"
    },
    {
      "name": "nn",
      "name2": "11"
    },
    {
      "name": "mm",
      "name2": "11"
    }
  ]
}

放到代碼里

 <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:ellipsize="end"
        android:maxLines="7"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="@id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/imageView"
        app:layout_constraintTop_toTopOf="@id/imageView"
        tools:text="@sample/info.json/data/name" />
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        tools:itemCount="10"
        tools:listitem="@layout/item_layout" />

</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="40dp"
        android:layout_height="40dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:srcCompat="@tools:sample/avatars" />

    <TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:ellipsize="end"
        android:maxLines="7"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="@id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/imageView"
        app:layout_constraintTop_toTopOf="@id/imageView"
        tools:text="@sample/info.json/data/name" />

    <TextView
        android:id="@+id/name2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:ellipsize="end"
        android:maxLines="7"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="@id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/imageView"
        app:layout_constraintTop_toBottomOf="@id/name"
        tools:text="@sample/users" />
</android.support.constraint.ConstraintLayout>

最后的效果


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘪校,一起剝皮案震驚了整個(gè)濱河市澄暮,隨后出現(xiàn)的幾起案子名段,更是在濱河造成了極大的恐慌,老刑警劉巖泣懊,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伸辟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡馍刮,警方通過查閱死者的電腦和手機(jī)信夫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卡啰,“玉大人静稻,你說我怎么就攤上這事⌒偃瑁” “怎么了振湾?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)亡脸。 經(jīng)常有香客問我押搪,道長(zhǎng),這世上最難降的妖魔是什么浅碾? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任大州,我火速辦了婚禮,結(jié)果婚禮上垂谢,老公的妹妹穿的比我還像新娘厦画。我一直安慰自己,他們只是感情好埂陆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布苛白。 她就那樣靜靜地躺著娃豹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晨另,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天档玻,我揣著相機(jī)與錄音,去河邊找鬼躯畴。 笑死民鼓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓬抄。 我是一名探鬼主播丰嘉,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嚷缭!你這毒婦竟也來了饮亏?” 一聲冷哼從身側(cè)響起耍贾,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎路幸,沒想到半個(gè)月后荐开,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡简肴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年晃听,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砰识。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡能扒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仍翰,到底是詐尸還是另有隱情赫粥,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布予借,位于F島的核電站越平,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灵迫。R本人自食惡果不足惜秦叛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瀑粥。 院中可真熱鬧挣跋,春花似錦、人聲如沸狞换。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)修噪。三九已至查库,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間黄琼,已是汗流浹背樊销。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脏款,地道東北人围苫。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像撤师,于是被迫代替她去往敵國(guó)和親剂府。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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