繁体   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