簡體   English   中英

如何從 Android 中的另一個視圖膨脹另一個視圖

[英]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.INVISIBLEView.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM