Android 冷兵器之 tools

前言

Android開發在所不免的就是UI的預覽和調整,通常狀況下都是直接run看效果,或者是使用ASpreview預覽,但這一樣帶來個小問題,就是你的測試內容會跟隨着代碼被打包到apk中,若是沒作容錯的處理頗有可能將測試內容展現給用戶。html

還有就是像一些列表是不支持預覽效果的,好比ListViewandroid

其實Android老早就有tools命名空間,做爲一個開發快到一年的我,最近看到一篇文章才發現這個tools大用處,在此作個筆記。git

直接看一下效果,最爲清楚:github

RecyclerView.gif

ListView 預覽.png

GridView 預覽.png

XML中的代碼區區幾行,可是右側的preview效果卻很直接,還有就是這些數據並不會打到apk中,直接運行是沒有任何效果的,這就是厲害之處!相關代碼已提交到Github上: Android Toolsjson

初步使用

既然是命名空間,那確定就要在XML開頭就要聲明。佈局

xmlns:tools="http://schemas.android.com/tools"
複製代碼

相似於測試

xmlns:android="http://schemas.android.com/apk/res/android"
複製代碼

而後就可使用tools的相關屬性了。屬性功能不少很全,我就介紹一下經常使用的,文尾會貼上相關的文章連接。google

View 相關spa

先從view相關提及,在XMLviewandroid任意屬性值,能夠直接替換成tools,這樣就能夠實現實時的預覽效果,而且正式部署以後不會展現。有點相似於dataBinding中的 default屬性,以TextView爲例。.net

//1. 原生
android:text="test text"
//2. databinding
android:text='@{viewModel.content, default="test text"}'
//3. tools
tools:text="test text"
複製代碼

preview的效果是同樣的,不過除了 1 之外,其餘運行效果是根據代碼中設置的內容決定的,真正作到了測試預覽。

以前也說了,view的其餘屬性它都支持。

context

經過

tools:context="com.xiaweizi.androidtoolsexample.CommonActivity"
複製代碼

的方式在根部局引用,主要的做用聲明該佈局文件默認關聯的Activity,引號傳Activity類的完整包名。隨之就能夠開啓一些與其相關的特性。好比平常點擊事件中,就能夠直接在XML中聲明onClick的方法名,而後會有錯誤的lint提示,須要你在Activity中建立改方法,跟隨着AS的智能指引,即可建立對應的方法。點擊事件的處理即可以放在裏面。

showIn

tools:showIn="@layout/activity_other"
複製代碼

在使用include或者merge時,內層佈局是預覽不到外層的佈局的。那經過showIn連接到外層佈局,就能夠直接連同外層佈局一同展現出來。

showIn

layout

一樣在XML中引用fragment佈局也是預覽不到效果的:

無

那經過:

<fragment
    android:id="@+id/fragment"
    android:name="com.xiaweizi.androidtoolsexample.CommonFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout="@layout/layout_fragment_test" />
複製代碼

的方式便可達到預覽的效果。

layout.png

進階使用

tools除去上面的功能,更強大的在於支持列表的預覽展現,也就是文章開頭預覽的效果,效果最明顯的就是ListView

ListView

ListView 預覽.png

// 1. 列表內容的佈局
tools:listitem="@layout/list_content"
// 2. 頭佈局的預覽展現
tools:listheader="@layout/list_header"
// 3. 腳佈局的預覽展現
tools:listfooter="@layout/list_footer"
複製代碼

一開始使用的時候發現不生效,後來發現須要給ListView設置id,就會馬上生效了。

GridView

GridView 預覽.png

一樣也適用於GridView

RecyclerView

RecyclerView.gif

說到RecyclerView一開始我覺得只支持itemCount的設置,後來多謝覺得小夥伴提的AndroidToolsExample/issues/1,我才發現能夠支持複雜的列表展現!

// 1. 設置展現 item 的數量
tools:itemCount="6"
// 2. 設置佈局方式 三種模式能夠選擇
// GridLayoutManager
// LinearLayoutManager
// StaggeredGridLayoutManager
tools:layoutManager="GridLayoutManager"
// 3. item 的佈局
tools:listitem="@layout/list_content"
// 4 設置佈局的方向
tools:orientation="horizontal"
// 5. 設置佈局橫、縱的列數
tools:spanCount="2"
複製代碼

sample

有人會好奇列表的數據哪來的,沒看你設置,居然能作到每條數據都不同。客官別急,接下來就是介紹一下@tools:sample/*的強大功能,做爲預覽視圖的佔位數據。看一看官網的使用介紹。

sample

各類類型的數據都支持構造,這裏我以例子做爲展現:

展現

每次使用,都會隨機的更換不一樣的值,詳情參見列表展現數據。

你覺得這樣就結束了嗎?too young!除去原生給的數據支持,我們也能夠本身構造假的數據。

sample data

直接能夠建立sample data,而後就能夠建立文本或者json數據。若是是json數據,你必須先運行一下才能使用。那看一下如何使用。

先建立json數據:

{
  "data": [
    {
      "name": "張三",
      "phone": "@tools:sample/us_phones",
      "time": "@tools:sample/date/hhmmss",
      "avatar": "@tools:sample/avatars"
    },
    {
      "name": "李四",
      "phone": "@tools:sample/us_phones",
      "time": "@tools:sample/date/hhmmss",
      "avatar": "@tools:sample/avatars"
    },
    {
      "name": "趙五",
      "phone": "@tools:sample/us_phones",
      "time": "@tools:sample/date/hhmmss",
      "avatar": "@tools:sample/avatars"
    },
    {
      "name": "王二麻",
      "phone": "@tools:sample/us_phones",
      "time": "@tools:sample/date/hhmmss",
      "avatar": "@tools:sample/avatars"
    }
  ]
}
複製代碼

而後直接在XML中,經過@sample/的方式拿到數據。

最終預覽

使用和預覽正如上圖所示。

總結

get了該技能,不說有多大用處吧,至少能夠提升開發效率,和減小把測試代碼部署到線上的失誤率吧,相信會幫助到你的!

感謝

tools 官方文檔

命名空間介紹

tools 大有用處

相關文章
相關標籤/搜索