`
byandby
  • 浏览: 1688992 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 在Xml文件配置自定义View 需要注意

阅读更多
   不知道 大家有没有在XML文件配置自定义View的经验 就比如这样 。

  <xiaohang.zhimeng.TestView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>


   那用过的朋友我不知道有没有遇见这样一个异常,我遇见2次了因为我就用过2次。到底是什么异常大家见下图!



  我想可能用过的朋友都会遇见这个异常。解决办法就是在我们自定义的构造方法里边少了一个这样的构造方法
public TestView(Context context, AttributeSet attr) {
		super(context, attr);
//至于这个构造函数里边要写一些什么大家就随便啦。
	}


  至于为什么需要这样一个构造方法,我也很郁闷不知道。 希望知道的高手,留言告诉一下吧,或者可以去我们的群里讨论。

  • 大小: 353.2 KB
分享到:
评论
4 楼 lwl139678 2011-11-20  
就稍微谈谈我个人的理解

在Android中,我们可以把View定义在XML中,就是楼说的


<xiaohang.zhimeng.TestView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

但是我们能把他定义在xml中的原因是这个View可以被解析,就像xml一样解析
在View里有一个这方法:
public View(Context context, AttributeSet attrs, int defStyle)
里面有一个
TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.View,
                defStyle, 0);

这个就是取出定义的View里面的双属性值

而报错的是这个方法:

    public View(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

调用是会调用

public View(Context context, AttributeSet attrs, int defStyle)

来解析
所以没有是系统会发生解析错误

3 楼 byandby 2010-12-02  
384444165 写道
这个应该可以解释 不过不是高手 呵呵
楼主看下api里面这两个:

View(Context context)
Simple constructor to use when creating a view from code.

View(Context context, AttributeSet attrs)
Constructor that is called when inflating a view from XML.

应该就晓得了吧 如果你直接在code里面实例化就不需要加后面的参数


感谢 你热心的 回答啊,解答了我的疑惑。 呵呵 自己学习太不注意,或者思考方式太狭隘了 ,呵呵。
2 楼 384444165 2010-12-02  
我觉得主要应该是xml里面的参数传入问题,直接实例化就不需要这个传入参数,所以……
super(context, attr); 
就把普通的样式参数处理了已经
1 楼 384444165 2010-12-02  
这个应该可以解释 不过不是高手 呵呵
楼主看下api里面这两个:

View(Context context)
Simple constructor to use when creating a view from code.

View(Context context, AttributeSet attrs)
Constructor that is called when inflating a view from XML.

应该就晓得了吧 如果你直接在code里面实例化就不需要加后面的参数

相关推荐

Global site tag (gtag.js) - Google Analytics