在我的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对象。
我确信我在概念上遗漏了一些东西,但欢迎任何帮助让我朝着正确的方向前进。
答案 0 :(得分:12)
如果我理解正确,你会看到你的朋友看得很好,但你想添加一个按钮吗? 我不知道你的FriendsView是什么样的,但是假设它是你可以添加孩子的东西(比如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)
答案 1 :(得分:4)
SurfaceView不能有子项,只有基于ViewGroup的视图可以(LinearLayout,RelativeLayout,...) 我想你想为你的ContentView()使用LinearLayout,或者更确切地说是RelativeLayout(如果Button应该在SurfaceView的“内部”)。对于LinearLayout,您必须处理布局方向(setOrientation()),对于RelativeLayout,您必须非常特别注意子项的LayoutParams,它将定义RelativeLayout中子项的相对坐标/位置。
如果你从XML中全部膨胀,那将是最好的。您还可以使用XML文件中的完整类名来扩展“自己的”视图。基本上没有必要自己组合一个ContentView。