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] 功能的運作。
沒有留言:
張貼留言