将视图添加到不带XML的视图

时间:2019-06-05 10:17:12

标签: android xamarin xamarin.android

我有一个扩展View的类(由于使用Xamarin,它在C#中)

public class ScannerOverlay : View
{

    public ScannerOverlay(Context context) : base(context)
    {
       //Initializing some values here
    }

    protected override void OnDraw(Canvas canvas)
    {
        base.OnDraw(canvas);

        //Draw some stuff on the canvas
    }
}

我使用以下方法创建此视图:View v = new ScannerOverlay(context);

现在,我想向该视图添加一个按钮。我该怎么做呢?该视图没有任何布局,因此AddView()无法正常工作。而且根据我的发现,不可能在画布上绘制按钮。

3 个答案:

答案 0 :(得分:1)

基本上,您不能将View添加到另一个View

硬体方式::您可以创建一个View,好像它内部有很多视图一样,但是您应该使用CanvasPaint手动绘制它们,还可以根据每个“假” View的触摸位置来处理点击。因此,这将花费您很多时间。这称为自定义视图

简便方式::您可以将任何View添加到ViewGroup以及ViewGroup的任何子级,例如FrameLayoutLinearLayout ,以及具有RelativeLayout功能的ViewGroup.AddView(view)。这称为复合视图

答案 1 :(得分:0)

通过从RelativeLayout而不是View扩展来解决此问题。

如果(如我的情况)未调用OnDraw方法,则在构造函数中设置以下内容:this.SetWillNotDraw(false);

答案 2 :(得分:0)

ViewGroup扩展了View,因此即使您扩展ViewGroup也可以直接获得View事件的所有功能。这样,您可以将新视图直接添加到CustomView。

public class ScannerOverlay : ViewGroup
{

    public ScannerOverlay(Context context) : base(context)
    {
       //Initializing some values here
    }

    protected override void OnDraw(Canvas canvas)
    {
        base.OnDraw(canvas);

        //Draw some stuff on the canvas
    }
}