Android在layout xml中使用include完成靜態載入 include靜態載入:不僅可以載入佈局,還可以載入控制項(控制項標簽名要在最外層)include標簽中有個layout屬性就是專門用來載入的。 在Android的layout樣式定義中,可以使用xml文件方便的實現,有時候為了模塊的 ...
Android在layout xml中使用include完成靜態載入
include靜態載入:
不僅可以載入佈局,還可以載入控制項(控制項標簽名要在最外層)
include標簽中有個layout屬性就是專門用來載入的。
在Android的layout樣式定義中,可以使用xml文件方便的實現,有時候為了模塊的復用,使用include標簽可以達到此目的。例如:
<include layout="@layout/otherlayout"></div>
Similarly, you can override all the layout parameters. This means that any android:layout_* attribute can be used with the
<include>
tag.意思是任何android:layout_*屬性都可以應用在標簽中。
如果使用如下代碼:
<Relativelayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<Textview
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/somestring"
android:id="@+id/top" />
<include layout="@layout/otherlayout"
android:layout_below="@id/top" />
</Relativelayout >
發現include
的otherlayout,並沒有在如我們預期的在id/top這個TextView下麵,而是忽略了android:layout_below屬性。經過Google發現,很多人遇到類似的問題。
有解決方法是在include的外面再包一層LinearLayout,如下:
<Linearlayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/top" >
<include layout="@layout/otherlayout">
</Linearlayout >
在Statckoverflow上找到了更好的解決方法: 解答道:必須同時重載layoutwidth和layoutheight屬性,其他的layout_*屬性才會起作用,否這都會被忽略掉。上面的例子應該寫成這樣:
<include layout="@layout/otherlayout">
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_below="@id/top" />
另外,關於xml的復用,還可以使用merge標簽,merge標簽主要是用來優化顯示的,減少View樹的層級,可以參考這裡:https://developer.android.com/resources/articles/layout-tricks-merge.html, 翻譯版在這裡:http://apps.hi.baidu.com/share/detail/20871363
原文:http://www.race604.com/using-include-in-layout/