Pro Android学习笔记(二九):用户界面和控制(17):include和merge
xml控件代碼重用:include
如果我們定義一個控件,需要在不同的layout中重復(fù)使用,或者在同一個layout中重復(fù)使用,可以采用include的方式。例如定義my_button.xml如下
<?xml version="1.0" encoding="utf-8"?>?
<Button xmlns:android="http://schemas.android.com/apk/res/android"?
??? android:textColor="#FF0000"?
??? android:layout_width="match_parent"?
??? android:layout_height="wrap_content" />
在布局中,我們將重復(fù)使用到這段代碼,如下處理:
<?xml version="1.0" encoding="utf-8"?>?
<LinearLayout … …" >?
??? <include?android:id="@+id/include_one"?
????????layout="@layout/my_button"?/>??<!-- 我們可以增加某些屬性,例如android:id -->
??? <include? android:id="@+id/include_two"????
??????? layout="@layout/my_button"?
??????? android:text="Happy"? />??<!-- 測試,不是所有的屬性增加都是有效,例如android:text,需要通過id獲取在代碼中重置 -->
</LinearLayout>
我們不僅可以引用重復(fù)代碼,還可以對屬性進(jìn)行增加和修改。但是增加和修改受到某些限制,有時并不起效果,這點(diǎn)必須要注意。
如果代碼中含有多個控件,根據(jù)XML的格式,我們不可以平行地擺放多個控件,很簡單,將它們放置在layout中就可以,例如:
<?xml version="1.0" encoding="utf-8"?>?
<LinearLayout …… >?
??? <View1 …… />?
??? <View2 …… />?
?????? …….?
</LinearLayout>
xml控件代碼重用:merge
如果我們有多個控件,將他們放置在某種布局的的layout中。那么回出現(xiàn)layout的嵌套。這種嵌套有時是沒有必要的,例如將一個LinearLayout放置在LinearLayout,這會降低代碼的效率。有時我們并不希望在重用代碼中就設(shè)定布局格式,這時這種方式就不合適。對于這多種控件,重復(fù)代碼的xml文件,可以使用merge,如下:
<?xml version="1.0" encoding="utf-8"?>?
<merge xmlns:android="http://schemas.android.com/apk/res/android">?
??? <View1 …… />??
??? <View2 …… />?
???? ……?
</merge>
在進(jìn)行代碼合并時,系統(tǒng)會去掉merge。
橫屏和豎屏:landsacpe & portrait
為了實(shí)現(xiàn)美觀,橫屏和豎屏可能會采用不同的排版方式,可在layout-land/,layout-port/中進(jìn)行設(shè)置,而layout/則是缺省的。即使我們設(shè)置了layout-land/和layout-port/,我們?nèi)詰?yīng)設(shè)置缺省的layout/,因?yàn)檫€有一種很少使用的layout-square,即使我們同時也設(shè)置了這種少有的方形,仍應(yīng)當(dāng)將缺省的進(jìn)行設(shè)置。因?yàn)槲覀儾磺宄唧w運(yùn)行應(yīng)用的android版本,有沒有新的類型出現(xiàn),設(shè)置缺省布局是最保險的方式,此外也可以避免某種情況,無法匹配資源變更,必須采用缺省。具體見Pro Android學(xué)習(xí)筆記(四):了解Android資源(下)的最后部分“資源和配置的變更”。
有些情況,我們需要強(qiáng)制橫屏或者豎屏,而不是根據(jù)重力感應(yīng)器或者陀螺儀這里傳感器來監(jiān)測手機(jī)的實(shí)際擺放情況。例如圖片播放或者視頻播放。即時我們在XML中設(shè)置為android:orientation="vertical",仍可以在代碼中強(qiáng)制設(shè)置方向:
protected void onCreate(Bundle savedInstanceState) {?
????super.onCreate(savedInstanceState);?
????setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
??? ... ...?
}?
下面是例子,左圖是普通情況,右圖在代碼中強(qiáng)制設(shè)置方向?yàn)闄M屏。
相關(guān)鏈接:?我的Android開發(fā)相關(guān)文章
轉(zhuǎn)載于:https://www.cnblogs.com/mzsoft/p/4427252.html
總結(jié)
以上是生活随笔為你收集整理的Pro Android学习笔记(二九):用户界面和控制(17):include和merge的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python -- 字符串的方法及注释
- 下一篇: android sina oauth2.