最近學習JetPack,看到這麼一句話,其實以前也有,那麼記錄一下到底什麼意思:
Android開發中在佈局文件裏面都會有如下面的內容:
<LinearLayoutxmlns: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:context=".TestActivity"/>
這裏出現的 tools:context 作用,網上講了很多,主要回答如下:
tools:context="activity name"這一句不會被打包進APK。只是ADT的Layout Editor在你當前的Layout文件裏面設置對應的渲染上下文,說明你當前的Layout所在的渲染上下文是activity name對應的那個activity,如果這個activity在manifest文件中設置了Theme,那麼ADT的Layout Editor會根據這個Theme來渲染你當前的Layout。就是說如果你設置的MainActivity設置了一個Theme.Light(其他的也可以),那麼你在可視化佈局管理器裏面看到的背景阿控件阿什麼的就應該是Theme.Light的樣子。僅用於給你看所見即所得的效果而已。
也許會看的似懂非懂,舉個例子就行了:
TextView 採用了 android :text , 而 EditText中使用了 tools:text,右邊Layout 編輯器會顯示內容Name,sample name 兩個字體, 如果你運行代碼後編譯,生成apk 後,終端就只顯示Name,不會顯示Sample Name這個字樣。大家可以試試運行,看下效果就知道。
( 比如我們在佈局TextView 中想要顯示一段文字時,以前使用android:text顯示,然後在編譯器中佈局調整,最後完成後刪除android:text屬性。有了tools參數後,可以直接使用tools:text在預覽時顯示文字即可,省卻了上面刪除的麻煩,編譯後此tools:text 相當於註釋了。)
我們回去繼續理解:tools:context 屬性
1. tools:context="activity name"這一句不會被打包進APK,
相當於這句被註釋了,編譯後不起任何作用.
2. 只是ADT的Layout Editor(即爲上面圖示右邊模擬器)在當前的Layout文件裏面設置對應的渲染上下文,當前的佈局xml所在的渲染上下文是activity name對應的那個activity,如果這個activity在manifest文件中設置了Theme,那麼ADT的Layout Editor會根據這個Theme來渲染你當前的Layout。就是說如果你設置的MainActivity設置了一個Theme.Light(其他的也可以)。
你加上了tools:context="activity name" ,這個xml 佈局就是渲染指定activity , manifest文件中設置了Theme 的話, 上圖右邊模擬器theme 樣式也會跟着變化對應 theme。
總而言之, 這些tools 屬性主要針對的 上圖右邊那個模擬器 調試時候顯示狀態,編譯中不起作用的,