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