如何在Android中从另一个视图中充气另一个视图

时间:2011-08-12 00:25:28

标签: android android-layout glsurfaceview

我知道在我的onCreate()中我可以通过以下方式从XML中扩展视图:

loadingScreen = (RelativeLayout) findViewById(R.id.loadingScreen);

但我怎么能从另一个视角做到这一点?我试图通过将其可见性从GONE设置为VISIBLE来调出加载屏幕,但似乎无法从glSurfaceView

中找出如何执行此操作

4 个答案:

答案 0 :(得分:3)

如果要扩充布局,代码如下所示:

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的教程:

答案 1 :(得分:1)

多数民众赞成实际上没有膨胀。 Inflating是解析XML布局文件并从中创建View和ViewGroup类实例结构的过程(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,你只需要使用它(tbh我从来没有这种情况)并且想要指定在哪里寻找你的特定视图。

答案 2 :(得分:0)

您无法获得当前View或当前Layout(您当前的View内容)中不存在的Activity的引用,但您可以使用当前View中的XML从其他LayoutInflater布局创建新的Activity


您可以添加当前的Activity内容,新的View,这就是您提到的“加载屏幕”,即使将其显示为Dialog或创建{{ 1}}然后将其添加到View

中的根布局

我希望我能帮到你

答案 3 :(得分:0)

如果我正确理解你想做什么:

假设你有一个glSurfaceView对象,你想抓住那个内部的视图。 你会做与普通视图相同的事情。我们说一个按钮:

Button button = (Button) glSurfaceView.findViewById(R.id.buttonid);

如果你的意思不同,请在评论中告诉我。

编辑:然后你可以设置按钮的可见性:

button.setVisibility(Button.GONE)