我有兴趣使用自定义视图来绘制,测量和显示一组依赖于我的应用程序后端的按钮。这需要我在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;
我还覆盖了OnMeasure
和OnDraw
:
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);
}
现在发生的事情是,OnDraw
和OnMeasure
都得到了它,事实上,OnDraw
似乎正在经历很多时间 - 更多的是我希望得到的。但是,我通过AddView
添加的一个按钮未在屏幕上绘制。如果你们能帮助我在屏幕上显示这一个按钮,我就可以编写核心逻辑了!
旁注:如果我将XML layout
文件设置为视图,我可以在屏幕上绘制内容:SetContentView(Resource.Layout.LayoutName)
但是,由于我的程序的性质需要添加动态视图一直以来,我宁愿避免编写冗长的布局文件。多谢你们!如果你认为这是一个值得的问题,请提出我的问题!
答案 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