前几天做了个手机UI的任务,虽然没用到,但是集中精力弄了弄自定义View,感觉还是蛮有收获的,特此分享。本文并不全面,网上有许多大牛写好的自定义View的文章,我就不献丑了,本文只是是缺补漏,对一些大牛忽视了的小问题,给大家提个醒,呵呵,方便后来学习的同学。

1:通过Layout/main.XML !

几个注意的地方:

  1. 一定要重写View的两个构造函数,View共有三个构造函数。一定不要要重写MyView(Context context,AttributeSet attrSet)。否则会出现FC错误。可以在这里给自定义的属性赋默认值,可以通过xml文件修改。
  2. 有一个疑问。不可以给自定义的View附件点击事件?!我确信自己的程序没有错误。我给自定义View附加点击监听后,却在手机中无法响应。而TextView就可以。
  3. 不可以使用自定义的构造函数。就算定义了,使用起来也是无效的。举例:mView = new MyView(this,mRect);mRect(Rect)并不会被真正使用。

2:通过加载View或者通过LinearLayout加载View。



1 ll = new LinearLayout(this.getBaseContext());   
2             ll.setOrientation(LinearLayout.VERTICAL);
3 LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(   
4                 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);   
5         lp1.weight = 1;
6 ll.addView(mView, lp1);  
7      setContentView(ll);



几个注意的地方:

  1. 通过setContView(mView);也可以。但是如果程序中有了LinearLayout则必须使用Linearlayout。
  2. 通过这种方法实现的自定义View可以使用自定义的构造函数。mView = new MyView(this,mRect);可以使用了。
  3. 无法实现自定义属性。即AttributeSet无效。
  4. 可以给自定义View附加点击监听,而且有效!

总结,可以不难看出,两种方法各有优缺点,所以采用何种方式比较好,要看具体情况,具体分析了。

一些编程上的经验总结:

  1. 修改程序的时候不能乱修改。要学会分析,改之前多问自己几个为什么,要由针对性。
  2. 可以通过Graphical Layout来检查XML文件是否有除语法之外的其他错误。也可以对界面进行一定的预览。
  3. 代码修改的时候,尤其是上下移动的时候,要注意是否有逻辑错误,典型的就是先使用后赋值。
  4. 随时给新定义的变量赋初始值是个好习惯。