android官方技術文件翻譯——設計時佈局屬性
阿新 • • 發佈:2019-02-09
在 Android Studio 0.2.11 版本中,佈局渲染(用於佈局編輯器以及XML編輯器的佈局預覽視窗),支援 設計時佈局屬性.
這些屬性用於佈局在工具裡渲染時期,但是對執行時沒有任何影響。這一點很有用,比如如果你想在編輯佈局的時候把 示例資料資料放到文字框中,但又不想這些屬性影響到你的應用的執行。 若要使用設計時屬性,請首先確保您有在您的佈局中定義工具名稱空間:
然後,例如設定文字欄位的文字,使用與Android 框架中相同的屬性,但使用
在上面例子中,Name 標籤使用正常的文字屬性,它將在執行時顯示。不過,文字欄位使用設計時屬性,因此它在工具中出現,而不是在執行時。 一般情況下,你可以設定任何的Android 框架的屬性作為設計時屬性;只是使用 屬性,Android
名稱空間屬性(在執行時使用)和工具屬性(在設計時將覆蓋執行時屬性)。
您還可以使用設計時屬性在工具裡刪除一個屬性的值。例如,有這樣一個bug(,你不能在佈局編輯器裡對ListView使用(根據你的需要,你可能會使用
這些屬性用於佈局在工具裡渲染時期,但是對執行時沒有任何影響。這一點很有用,比如如果你想在編輯佈局的時候把 示例資料資料放到文字框中,但又不想這些屬性影響到你的應用的執行。 若要使用設計時屬性,請首先確保您有在您的佈局中定義工具名稱空間:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
...
這個工具名稱空間是Android的工具專門公認的名稱空間,所以你定義在檢視元素上的所有的tool-namespace的屬性,在應用程式被打包時都將自動剝離並且不會對執行時帶來開銷。
然後,例如設定文字欄位的文字,使用與Android 框架中相同的屬性,但使用
tools:
名稱空間而不是 android:
名稱空間:
<TextView
android:text="Name:"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
tools:text="John Doe"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
在上面例子中,Name 標籤使用正常的文字屬性,它將在執行時顯示。不過,文字欄位使用設計時屬性,因此它在工具中出現,而不是在執行時。 一般情況下,你可以設定任何的Android 框架的屬性作為設計時屬性;只是使用
tools:
名稱空間而不是android:
名稱空間。還要注意的是,你不必只選擇其中的一個;您可以設定兩個fastScrollAlwaysVisible
屬性。但是,您可能仍然希望該屬性在執行時是設定的。通過設計時屬性,你可以這樣解決:
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fastScrollAlwaysVisible="true"
tools:fastScrollAlwaysVisible=""/>
下面是另一個例子;我們有一個有多個子view的FrameLayout,並且在設計時,我們只希望看到他們中的一個,比如說第二個:我們可以使用 tools:visibility 屬性:
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First"
tools:visibility="invisible" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second"
tools:visibility="visible" />
(根據你的需要,你可能會使用 visibility="gone"
來代替 visibility="invisible"
。)
限制
- 目前僅支援覆蓋現有的屬性。我們可能要定義一些額外的方便的屬性,使比如選擇在ViewFlipper 顯示的子view等等變得簡單
- 此時你必須手動編輯您的設計時屬性
- 它們不會作為一個選項出現,比如在佈局編輯器屬性表中。
- 編輯器的程式碼完成功能不會幫助你進入這些屬性;使用它們的最簡單的方法是先在Android名稱空間中進入,然後進行更換字首來完成。
- 需要注意的是設計時屬性僅支援佈局檔案本身。你不能在其他地方使用它們——比如在選單 XML 檔案中,字串資源定義中,等等。
- 在這一點上,設計時屬性只能用於框架資源中,而無法在自定義屬性使用。
tools:
名稱空間的其他屬性的詳細資訊,請參閱 Tools Attributes。