java - 是否可以将按钮添加到以编程方式设置的框架布局?

标签 java android android-linearlayout android-framelayout

这个问题有点难以描述,但我会尽力而为:

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

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

谢谢大家!

最佳答案

当然,您可以向您拥有的 FrameLayout 添加尽可能多的按钮和其他小部件。由于 FrameLayout 允许堆叠 View ,因此您在 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

发生这种情况是因为:

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

关于java - 是否可以将按钮添加到以编程方式设置的框架布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931151/

相关文章:

java - maven如何知道JAVA_HOME在Ubuntu中设置为环境变量

java - JUnit - 从类型转换返回模拟对象

javascript - 如何确保加载所有 HTML

android - Android 中是否可以在 ScrollView 的底部设置 TextView ?

java - 更改进度条javaFX的样式

java - 从Android中的其他类调用主类方法

android - 应用程序的预定义操作。从联系人链接到我的应用程序

java - 在多个 Activity 中使用 Android WifiP2P

android - Android 中的中心对齐

android - 如何在android中的样式中设置引力?