Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义android视图的要求_Android_View_Xamarin - Fatal编程技术网

自定义android视图的要求

自定义android视图的要求,android,view,xamarin,Android,View,Xamarin,我对使用自定义视图绘制、测量和显示一组按钮感兴趣,这些按钮依赖于我的应用程序的后端。这需要我在Android中动态地实现这一点。你能帮我开始吗 现在我们开始:首先在我的main活动中我实例化了我的自定义类,该类继承自TableLayout,它也是一个视图: var keyboardView = new KeyboardView(this, layout, droidLayout, this.Colors); 然后我将内容视图设置为自定义类的新实例:SetContentView(keyboard

我对使用自定义视图绘制、测量和显示一组按钮感兴趣,这些按钮依赖于我的应用程序的后端。这需要我在Android中动态地实现这一点。你能帮我开始吗

现在我们开始:首先在我的
main活动中
我实例化了我的自定义类,该类继承自
TableLayout
,它也是一个视图:

var keyboardView = new KeyboardView(this, layout, droidLayout, this.Colors);
然后我将内容视图设置为自定义类的新实例:
SetContentView(keyboardView)这是我的类的构造函数,它可以帮助我获得我需要的所有信息的作用域:

public KeyboardView(Context context, KeyboardLayout layout, int droidLayout, Dictionary<string, int> colors)
    : base(context) {
    this._Colors = colors;
    this._Context = context;
    this.KeyboardLayout = layout;
    this.SetWillNotDraw(false);
    //this.ButtonLayout = ll;
    this.DrawingCacheEnabled = true;
    this.DroidLayout = droidLayout;
现在发生的事情是,
OnDraw
OnMeasure
都得到了它,事实上,
OnDraw
似乎被击中了很多次,所以我想数一数。但是,我通过
AddView
添加的一个按钮没有显示在屏幕上。如果你们能帮我在屏幕上找到这个按钮,我就可以开始写核心逻辑了


另一方面:如果我将
XML布局
文件设置为视图,我可以在屏幕上绘制内容:
SetContentView(Resource.layout.LayoutName)
,但是,由于我的程序的性质要求一直添加动态视图,我宁愿避免编写冗长的布局文件。谢谢大家!如果你认为我的问题值得的话,就把它提出来

不要忘记调用super(),以允许父类为重写的方法执行它需要执行的操作

protected override void OnDraw(Canvas canvas) {
    super(canvas)
}
相关链接 一般来说,这是一个很好的起点。特别是,它详细介绍了如何添加自定义属性、如何执行自定义绘图以及如何设计在您自己的应用程序上下文中有意义的自定义事件

此外,看起来您正在尝试在Java中使用C风格的语法,这对继承之类的东西不起作用。阅读一些java教程可能会对您有所帮助。
这是一个很好的资源,应该可以帮助你站起来行动。祝你好运

我尝试使用c#equalant,但它不正确:
protectedoverridevidioondraw(Canvas-Canvas):base(Canvas){}
Good链接。如果你注意到的话,我在我的帖子中给xamarin加了标签。这让我可以在android中使用c#代码!嘿请让我知道你为什么否决我的问题。这将允许我以后提出更明智的问题!
protected override void OnDraw(Canvas canvas) {
    super(canvas)
}