diff --git a/问题/View/自定义View几个重要的函数.md b/问题/View/自定义View几个重要的函数.md index 7a2a489..3159e2a 100644 --- a/问题/View/自定义View几个重要的函数.md +++ b/问题/View/自定义View几个重要的函数.md @@ -8,7 +8,7 @@ ## 一.自定义View分类 -我自己将自定义View分为了两类: +### 我自己将自定义View分为了两类: ### 1.自定义ViewGroup @@ -22,7 +22,7 @@ 例如:定义一个支持自动加载网络图片的ImageViewView,或制作一种特殊的动画效果。 - 一般来说,自定义View在大多数情况下都有替代方案,利用图片或者组合动画来实现,但是使用后者可能会造成内存耗费过大,制作麻烦更诸多问题。 + 一般来说,自定义View在大多数情况下都有替代方案,利用图片或者组合动画来实现,但是使用后者可能会面临内存耗费过大,制作麻烦更诸多问题。 ## 二.几个重要的函数 @@ -31,7 +31,25 @@ ``` public void SloopView(Context context) {} public void SloopView(Context context, AttributeSet attrs) {} - public void SloopView(Context context, AttributeSet attrs, int defStyle) {} - public void SloopView(Context context, AttributeSet attrs, int defStyle, int defRes) {} + public void SloopView(Context context, AttributeSet attrs, int defStyleAttr) {} + public void SloopView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {} ``` + 可以看出,关于View构造函数的参数有多有少,先排除几个不常用的,留下常用的再细细研究。 + 有四个参数的构造函数在API21的时候才添加上,我们一般不使用,排除。 + +有三个参数的构造函数中第三个参数是默认的Style,只有在明确调用的时候才会生效,这里的默认的Style是指它在当前Application或Activity所用的Theme中的默认Style,以系统中的ImageButton为例说明: +``` + public ImageButton(Context context, AttributeSet attrs) { + this(context, attrs, com.android.internal.R.attr.imageButtonStyle); + } + + public ImageButton(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); //此处调了四个参数的构造函数无视即可 + } +``` +注意:即使你再View中使用了Style这个属性也不会调用三个参数的构造函数,所调用的依旧是两个参数的构造函数。 + +由于三个参数的构造函数我们一般也用不上,排除。 + +