是否可以将按钮添加到以编程方式设置的framelayout?

时间:2013-07-29 18:08:58

标签: java android android-linearlayout android-framelayout

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

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

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

谢谢你们!

2 个答案:

答案 0 :(得分:7)

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

// 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:

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

// 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资源页面)

答案 1 :(得分:0)

http://developer.android.com/reference/android/widget/FrameLayout.html

“FameLayout旨在阻挡屏幕上的某个区域以显示单个项目。通常,FrameLayout应该用于保存单个子视图,因为以可扩展到不同的方式组织子视图可能很困难但是,没有子项相互重叠的屏幕大小。但是,您可以使用android:layout_gravity属性为FrameLayout添加多个子项,并通过为每个子项分配重力来控制它们在FrameLayout中的位置。“