一炎码、tools 命名空間的作用有哪些郑叠?
根據(jù)官方文檔描述孙技,根據(jù)其屬性的功能類別产禾,大致有三種主要功能:
- 這些屬性支持設(shè)計(jì)時(shí)功能(例如,在片段中顯示哪種布局)
- 編譯時(shí)行為(例如應(yīng)用于XML資源的縮小模式)
- 構(gòu)建應(yīng)用程序時(shí)牵啦,構(gòu)建工具會(huì)刪除這些屬性亚情,因此不會(huì)影響APK大小或運(yùn)行時(shí)行為。
說的通俗一點(diǎn)就是:
- 減少或者避免黃線提示哈雏,讓代碼更清爽楞件,讓編譯少報(bào)錯(cuò)
- 讓預(yù)覽界面更靈活,可以隨心所欲的定制預(yù)覽視圖
- 壓縮資源文件僧著,降低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ù)的類型种蝶。
這些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)提供的
上述表格中不僅有常用文本數(shù)據(jù)和日期等數(shù)據(jù)个粱,還提供了一些圖片樣本數(shù)據(jù),那么該如何使用呢翻翩?很簡(jiǎn)單都许,只需要切換到布局預(yù)覽界面,并拖動(dòng)一個(gè) ImageView 到面板上嫂冻,然后 Android studio 就會(huì)彈出如下界面:
然后選擇 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ù)桨仿,如此一來睛低,效果如下:
2. 自定義 sample data
如果我們想要是用自己定制化的樣例數(shù)據(jù),該如何做呢服傍?其實(shí)很簡(jiǎn)單暇昂,只需要在 app 目錄下創(chuàng)建 sample data directory 就可以了:
接下來,我們就可以在里面定制我們自己的數(shù)據(jù)了伴嗡,在剛建好的 sampledata 目錄下新建一個(gè) txt 格式的數(shù)據(jù)文件急波,如 users,然后在里面創(chuàng)建如下數(shù)據(jù):
<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" />
通過配置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>
最后的效果