是否可以向以编程方式设置的框架布局添加按钮? [英] Is it possible to add buttons to a framelayout that was set programmatically?

查看:23
本文介绍了是否可以向以编程方式设置的框架布局添加按钮?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这有点难以描述,但我会尽我所能:

this is somewhat of of difficult to describe issue but I'll do my very best:

我正在开发一个使用自定义相机活动的 Android 应用程序.在此相机活动中,我使用编程方式创建表面视图,并将其设置为 xml 布局文件中定义的框架布局(覆盖全屏).

I am developing a an android app that uses a custom camera activity. In this camera activity I use create a surface view programmatically and set it to the framelayout (covers full screen) that was defined in the xml layout file.

我现在的问题是,如何将其他元素添加到框架布局中?只能以编程方式吗?我问是因为到目前为止我只能以编程方式添加其他元素.我在 xml 布局中添加的元素没有出现在屏幕上.它们是否可能就在我添加到框架布局的表面视图后面?如果是这样,是否有可能将他们带到前面?

My question now is, how can I add other elements to the frame layout? Only programmatically? I am asking because as of now I was only able to add other elements programmatically. Elements that i added in the xml layout didn't appear on screen. Is it possible that they are just behind the surface view that i add to the frame layout? If so, would it be possible to bring them to the front?

谢谢你们!

推荐答案

当然,您可以向您拥有的 FrameLayout 添加尽可能多的按钮和其他小部件.由于 FrameLayout 允许堆叠视图,因此您在 xml 文件中添加的组件现在位于您以编程方式添加的视图之后.以下是动态创建和添加小部件的方法:

Sure, you can add as many buttons and other widgets to the FrameLayout you have. Since the FrameLayout allows stacking of views, the components that you added in the xml file are now behind the View that you added programmatically. Here's how you can create and add widgets dynamically:

// find your framelayout
frameLayout = (FrameLayout) findViewById(....);

// add these after setting up the camera view        

// create a new Button
Button button1 = new Button(this);

// set button text
button1.setText("....");

// set gravity for text within button
button1.setGravity(Gravity.....);

// set button background
button1.setBackground(getResources().getDrawable(R.drawable.....));

// set an OnClickListener for the button
button1.setOnClickListener(new OnClickListener() {....})

// declare and initialize LayoutParams for the framelayout
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.WRAP_CONTENT,
            FrameLayout.LayoutParams.WRAP_CONTENT);

// decide upon the positioning of the button //
// you will likely need to use the screen size to position the
// button anywhere other than the four corners
params.setMargins(.., .., .., ..);

// use static constants from the Gravity class
params.gravity = Gravity.CENTER_HORIZONTAL;

// add the view
fl1.addView(button2, params);

// create and add more widgets

....
....

编辑 1:

你可以在这里使用一个技巧:

There's a trick you can use here:

// Let's say you define an imageview in your layout xml file. Find it in code:
imageView1 = (ImageView) findViewById(....);

// Now you add your camera view.
.........

// Once you add your camera view to the framelayout, the imageview will be 
// behind the frame. Do the following:
framelayout.removeView(imageView1);
framelayout.addView(imageView1);

// That's it. imageView1 will be on top of the camera view, positioned the way
// you defined in xml file

发生这种情况是因为:

子视图在堆栈中绘制,最近添加的子视图位于顶部(来自 FrameLayout 上的 android 资源页面)

Child views are drawn in a stack, with the most recently added child on top (from android resource page on FrameLayout)

这篇关于是否可以向以编程方式设置的框架布局添加按钮?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆