標籤:
xml控制項代碼重用:include
如果我們定義一個控制項,需要在不同的layout中重複使用,或者在同一個layout中重複使用,可以採用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" />
在布局中,我們將重複使用到這段代碼,如下處理:
<?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>
我們不僅可以引用重複代碼,還可以對屬性進行增加和修改。但是增加和修改受到某些限制,有時並不起效果,這點必須要注意。
如果代碼中含有多個控制項,根據XML的格式,我們不可以平行地擺放多個控制項,很簡單,將它們放置在layout中就可以,例如:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout …… >
<View1 …… />
<View2 …… />
…….
</LinearLayout>
xml控制項代碼重用:merge
如果我們有多個控制項,將他們放置在某種布局的的layout中。那麼回出現layout的嵌套。這種嵌套有時是沒有必要的,例如將一個LinearLayout放置在LinearLayout,這會降低代碼的效率。有時我們並不希望在重用代碼中就設定布局格式,這時這種方式就不合適。對於這多種控制項,重複代碼的xml檔案,可以使用merge,如下:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<View1 …… />
<View2 …… />
……
</merge>
在進行代碼合并時,系統會去掉merge。
橫屏和豎屏:landsacpe & portrait
為了實現美觀,橫屏和豎屏可能會採用不同的排版方式,可在layout-land/,layout-port/中進行設定,而layout/則是預設的。即使我們設定了layout-land/和layout-port/,我們仍應設定預設的layout/,因為還有一種很少使用的layout-square,即使我們同時也設定了這種少有的方形,仍應當將預設的進行設定。因為我們不清楚具體運行應用的android版本,有沒有新的類型出現,設定預設布局是最保險的方式,此外也可以避免某種情況,無法匹配資源變更,必須採用預設。具體見Pro Android學習筆記(四):瞭解Android資源(下)的最後部分“資源和配置的變更”。
有些情況,我們需要強制橫屏或者豎屏,而不是根據重力感應器或者陀螺儀這裡感應器來監測手機的實際擺放情況。例片播放或者視頻播放。即時我們在XML中設定為android:orientation="vertical",仍可以在代碼中強制設定方向:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
... ...
}
下面是例子,左圖是普通情況,右圖在代碼中強制設定方向為橫屏。
相關連結: 我的Android開發相關文章
Pro Android學習筆記(二九):使用者介面和控制(17):include和merge