Android 冷兵器 之 tools

來源:互聯網
上載者:User

標籤:get   授權   blog   空間   manager   iss   date   grid   進階   

代碼地址如下:
http://www.demodashi.com/demo/12612.html

前言

Android開發在所難免的就是UI的預覽和調整,一般情況下都是直接run看效果,或者是使用ASpreview預覽,但這同樣帶來個小問題,就是你的測試內容會跟隨著代碼被打包到apk中,如果沒做容錯的處理很有可能將測試內容展示給使用者。

還有就是像一些列表是不支援預覽效果的,比如ListView

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

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

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

專案檔目錄

初步使用

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

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

類似於

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

然後就可以使用tools的相關屬性了。屬性功能很多很全,我就介紹一下常用的,文尾會貼上相關的文章連結。

View 相關

先從view相關說起,在XMLviewandroid任意屬性值,可以直接替換成tools,這樣就可以實現即時的預覽效果,並且正式部署之後不會展示。有點類似於dataBinding中的 default屬性,以TextView為例。

//1. 原生android:text="test text"//2. databindingandroid:text=‘@{viewModel.content, default="test text"}‘//3. toolstools: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連結到外層布局,就可以直接連同外層布局一同展示出來。

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

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

進階使用

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

ListView

// 1. 列表內容的布局tools:listitem="@layout/list_content"// 2. 頭布局的預覽展示tools:listheader="@layout/list_header"// 3. 腳布局的預覽展示tools:listfooter="@layout/list_footer"

一開始使用的時候發現不生效,後來發現需要給ListView設定id,就會立刻生效了。

GridView

同樣也適用於GridView

RecyclerView

說到RecyclerView一開始我以為只支援itemCount的設定,後來多謝以為小夥伴提的AndroidToolsExample/issues/1,我才發現可以支援複雜的列表展示!

// 1. 設定展示 item 的數量tools:itemCount="6"// 2. 設定布局方式 三種模式可以選擇// GridLayoutManager// LinearLayoutManager// StaggeredGridLayoutManagertools:layoutManager="GridLayoutManager"// 3. item 的布局tools:listitem="@layout/list_content"// 4 設定布局的方向tools:orientation="horizontal"// 5. 設定布局橫、縱的列數tools:spanCount="2"

sample

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

各種類型的資料都支援構造,這裡我以例子作為展示:

每次使用,都會隨機的更換不同的值,詳情參見列表展示資料。

你以為這樣就結束了嗎?too young!除去原生給的資料支援,咱們也可以自己構造假的資料。

直接可以建立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 大有用處

Android 冷兵器 之 tools

代碼地址如下:
http://www.demodashi.com/demo/12612.html

註:本文著作權歸作者,由demo大師代發,拒絕轉載,轉載需要作者授權

Android 冷兵器 之 tools

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.