我知道在我的onCreate()
中我可以通过以下方式从XML中扩展视图:
loadingScreen = (RelativeLayout) findViewById(R.id.loadingScreen);
但我怎么能从另一个视角做到这一点?我试图通过将其可见性从GONE
设置为VISIBLE
来调出加载屏幕,但似乎无法从glSurfaceView
答案 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.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,你只需要使用它(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)