2011年12月3日

第一個 Android 練習題撰寫心得

學習第一個 Android 程式時,通常會在第一個 Activity 中載入 main layout (res/layout/main.xml)
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
但,當預期中元件相關的屬性不符需要,那就由程式碼來動態控制;如取得 layout :
LinearLayout linear = (LinearLayout)findViewById(R.id.linear);
...
只要在 layout 中定義即可:
< LinearLayout android:id="@+id/linear" >
接著,試想某些情形在 class 設計耦合上不與 layout 直接相關,那就得搬出 API :
先取得 content view:
View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
取得 layout (如果預期是 LinearLayout):
LinearLayout linear = (LinearLayout)((ViewGroup)contentView).getChildAt(0);
看來只要是 ViewGroup class ,就有機會介由 .getChildAt() 取得物件;再由 instanceof 辨識 class type。
唯,物件的辨別稍微麻煩;目前為止,我只想到 android:tag="..." 來加以利用。

另外,過去維護大型系統或 class 較多的 project 時,多半不開啟 [Build Automatically] 功能;但 Android project 則是必要的,因為 layout file 任何的異動,會由 Android 的 builders 來產生新的 R class,以便在 activity class 中進行 reference。
而 resource files 之間,字串 id 的參考最為常見,所以 res/values/strings.xml 維護更需要 [Build Automatically] 功能的運作。

沒有留言: