我有一个扩展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()无法正常工作。而且根据我的发现,不可能在画布上绘制按钮。
答案 0 :(得分:1)
基本上,您不能将View
添加到另一个View
。
硬体方式::您可以创建一个View
,好像它内部有很多视图一样,但是您应该使用Canvas
和Paint
手动绘制它们,还可以根据每个“假” View
的触摸位置来处理点击。因此,这将花费您很多时间。这称为自定义视图。
简便方式::您可以将任何View
添加到ViewGroup
以及ViewGroup
的任何子级,例如FrameLayout
,LinearLayout
,以及具有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
}
}