我在最近的一本書(學習OpenGL ES的手機遊戲和圖形開發)中的例子,並建議在主要活動中編程添加一個新的佈局(讓我們稱之爲settingsLayout),然後:覆蓋GLSurfaceView上的xml佈局的最佳做法?
LayoutInflater settingsInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View settingsLayoutView = settingsInflater.inflate(R.layout.mySettingsLayout,settingsLayout,false);
settingsLayout.addView(settingsLayoutView);
addContentView(settingsLayout,settingsLayoutParams);
這工作正常,但我已經將它添加到我的一個操作欄菜單項的回調中,並且我希望能夠在使用後退按鈕時刪除此視圖。到目前爲止,這導致我很頭痛。同時,似乎實現動態視圖的最自然的方式(可以添加到backstack等)是通過Fragments實現的。但是,片段需要屬於佈局,目前我的代碼直接將GLSurfaceView作爲我的主要活動的內容視圖分配,而根本不使用佈局。由於GLSurfaceView是View(而不是View Group)的子類,因此我無法使用它來產生子片段等子元素。
本書的作者聲稱,這種方法是「圓滑」的,但沒有給出任何其他原因直接將GLSurfaceView指定爲內容視圖。是否有性能問題需要注意?或者,讓我的GLSurfaceView和後來衍生的視圖都屬於「主」佈局,就像「圓滑」一樣?
有沒有其他一些更自然的方法讓按鈕,文本框等動態地出現和消失在我的GLSurfaceView之上?
現在我已經創建了一個單獨的佈局作爲「主機」視圖組,然後在該佈局中我有一個片段,其中我的GLSurfaceView獲取setContentView。其他片段然後以編程方式在頂部創建。這似乎是有效的,但我仍然想知道,如果這是最好的方式,性能明智。 – djphd