[英]How to inflate another view from another view in Android
我知道在我的onCreate()
中,我可以通過以下方式從 XML 膨脹視圖:
loadingScreen = (RelativeLayout) findViewById(R.id.loadingScreen);
但我怎么能從另一個角度做到這一點呢? 我試圖通過將其可見性從GONE
設置為VISIBLE
來調用加載屏幕,但似乎無法從我的glSurfaceView
中弄清楚如何做到這一點
如果你想膨脹一個布局,代碼如下所示:
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout myRoot = new LinearLayout(context);
View itemView = inflater.inflate(R.layout.layout_details, myRoot);
在這里,您首先創建一個新的 LinearLayout,然后將 ID 為 R.layout.layout_details 的布局膨脹到其中。 然后 inflate 方法返回 myRoot 視圖。
這是一個關於 LayoutInflater 的教程:
那實際上並沒有膨脹。 膨脹是解析 XML 布局文件並從中創建 View 和 ViewGroup class 實例的結構的過程(例如setContentView()
在后台為您執行此操作)。
您所做的是獲取對您在 XML 布局文件中定義的代碼中的視圖的引用。 要更改GLSurfaceView
的可見性,您必須像上面那樣引用它。 但請記住,必須在布局文件中定義視圖(本例中為GLSurfaceView
)。
引用后,您必須調用 GLSurfaceView.setVisibility() 來更改它的可見性。
這是一個例子:
GLSurfaceView glsurface = (GLSurfaceView) findViewById(R.id.myglsurfaceid);
glsurface.setVisibility(View.VISIBLE);
當然,您也可以使用View.INVISIBLE
或View.GONE
,這取決於您想要做什么。
如果您引用一個布局(例如RelativeLayout
),您可能會使用您的 RelativeLayout 實例的 findViewById() 找到此布局的子級:
RelativeLayour rl = (RelativeLayout) findViewById(R.id.mylayout);
(Button) mybutton = (Button) rl.findViewById(R.id.mybutton);
但這通常不是必需的(至少在您剛開始使用 Android 時),因為活動 findViewById() 會找到所有顯示的視圖,即使在子布局中也是如此。 如果您的 ui 結構中有重復的 ID(我從未遇到過這種情況)並且想要指定在哪里查找您的特定視圖,則只需使用它。
您無法獲得對當前Layout
或當前View
(當前Activity
內容)中不存在的View
的引用,但您可以使用當前Activity
中的LayoutInflater
從另一個XML
布局創建新View
。
您可以向您當前的Activity
內容添加一個新的View
,這就是您所說的“加載屏幕”,甚至可以將其顯示為Dialog
或創建View
然后將其添加到Activity
的根布局中
我希望我幫助了你
如果我正確理解你想要做什么:
假設您有一個 glSurfaceView object 並且您想要獲取該視圖內部的視圖。 您將執行與正常視圖相同的操作。 假設一個按鈕:
Button button = (Button) glSurfaceView.findViewById(R.id.buttonid);
如果您的意思有所不同,請在評論中告訴我。
編輯:然后你可以設置按鈕的可見性:
button.setVisibility(Button.GONE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.