Android:如何通过编程将按钮添加到视图中

7
在我的Android活动中,我创建了一个扩展SurfaceView的自定义视图(使用MonoDroid,因此语法略有不同):
class FriendsView : SurfaceView
{
    ...

    public FriendsView(Context context) : base(context)
    {

        ... create my custom view ...

    }


}

在我的 Activity 类中,我将内容视图设置为该视图:
protected override void OnCreate(Bundle bundle)
{

    base.OnCreate(bundle);

    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent);

    FriendsView friendsView = new FriendsView(this);

    SetContentView(friendsView, layoutParams);

}

我想在视图中添加一个按钮,但是我不知道如何做到这一点。我读过的所有内容都是从main.xml的角度开始的,但我不知道如何使用它来声明一个在我的视图中可见的按钮。同样,在Activity或View类中,我找不到任何让我可以编程添加Button对象的方法。
我确信我在概念上缺少了什么,但我希望能得到任何帮助,让我朝着正确的方向前进。

抱歉,你从哪里获得了带有这样原型的构造函数 ViewGroup.LayoutParams - Dims
你可以在这里找到你的答案。 - yugidroid
2个回答

13

如果我理解正确,您能够正常看到friendsView,但您想在其上添加一个按钮? 我不知道FriendsView是什么类型的View,但假设它是一些可以添加子项的东西(比如linearLayout之类的),您应该能够做到这一点(只是从我的头顶上)

 //assuming you have a friendsView object that is some sort of Layout.
 Button yourButton = new ImageButton(this);
 //do stuff like add text and listeners.

 friendsView.addView(yourButton);

如果你想向friendsView中的其他元素添加子项,你可以使用findViewById()查找它(如果要用此方法找到元素,请添加ID)


嗨,Nanne - 是的,没错。我的视图运行良好,但我想添加一些功能,其中包括添加一个按钮。 - user304582
我建议使用addView函数 :) - Nanne
1
我尝试了你的建议,但是我的自定义View(它扩展了SurfaceView)中没有addView方法。SurfaceView不支持按钮吗? - user304582
也许将其视为 XML 布局会更容易:您可能可以有一个包含 2 个子项的 linearLayout:surfaceView 和 button。因此,您需要添加一个“主”视图,然后添加您的自定义视图和按钮。也许首先尝试使用 XML 完成它。 - Nanne
谢谢 - 我会尝试一下的。我想我很惊讶你不能在SurfaceView上添加一个按钮,但也许我对它们预期的用途理解得不是很好! - user304582
@user304582:SurfaceView适用于快速、动态的自定义绘图,比如游戏应用程序。http://developer.android.com/guide/topics/graphics/index.html - bigstones

5
一个SurfaceView不能有子元素,只有基于ViewGroup的视图才能有(如LinearLayout、RelativeLayout等)。 我猜你想为你的ContentView()使用一个LinearLayout,或者更好地说是一个RelativeLayout(如果Button应该在SurfaceView“内部”)。对于LinearLayout,你需要注意布局方向(setOrientation()),对于RelativeLayout,你需要非常特别地关注子元素的LayoutParams,这将定义子元素在RelativeLayout内的相对坐标/位置。 最好的方法是从XML中膨胀所有内容。你也可以通过在XML文件中使用完整的类名来膨胀你的“自己的”视图。基本上没有必要自己组合一个ContentView。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接