自定义android视图的要求

时间:2014-01-30 22:33:10

标签: android view xamarin

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

我们开始:首先在我的MainActivity我实例化我的自定义类,该类继承自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;

我还覆盖了OnMeasureOnDraw

protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int h = 100;
    int w = 100;
    //Overall keyboard/View dimensions //Difference between Canvas size and KeyboardDimensions?
    this.SetMeasuredDimension(w, h);

    //this.Layout.CanvasSize.
}

protected override void OnDraw(Canvas canvas) {
    var bt = new Button(this._Context);
    bt.Text = "laaaa";
    this.AddView(bt);
}

现在发生的事情是,OnDrawOnMeasure都得到了它,事实上,OnDraw似乎正在经历很多时间 - 更多的是我希望得到的。但是,我通过AddView添加的一个按钮未在屏幕上绘制。如果你们能帮助我在屏幕上显示这一个按钮,我就可以编写核心逻辑了!

旁注:如果我将XML layout文件设置为视图,我可以在屏幕上绘制内容:SetContentView(Resource.Layout.LayoutName)但是,由于我的程序的性质需要添加动态视图一直以来,我宁愿避免编写冗长的布局文件。多谢你们!如果你认为这是一个值得的问题,请提出我的问题!

2 个答案:

答案 0 :(得分:1)

一般来说,this是一个很好的起点。特别是它详细介绍了如何添加自定义属性,如何执行自定义绘图,以及如何设计在您自己的应用程序的上下文中有意义的自定义事件。

此外,您似乎正在尝试在Java中使用C#样式语法,因为它不会像继承那样工作。阅读一些Java教程可能会帮助你。 This是一个很好的资源,应该可以帮助你起步。祝你好运!

答案 1 :(得分:-1)

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

protected override void OnDraw(Canvas canvas) {
    super(canvas)
}

相关链接 http://developer.android.com/guide/topics/ui/custom-components.html#compound