本文主要是介绍Android自定义控件使用到的理论知识(-),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、自定义view的分类
1、自定义viewGroup:
自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup和各种的layout,包含有子view
2、自定义view
在没有现成的view,需要通过自定义去实现的时候,就使用自定义view,一般继承自view,surfaceView或者其他的view,不包含子view
2、几个重要的函数
1、构造函数
构造函数是view的入口,可以用于初始化一些的内容,和获取自定义属性view的构造函数有四种重载分别如下:
public void MyView(Context context){}
public void MyView(Context context , AttributeSet attrs){}
public void MyView(Context context , AttributeSet attrs , int defStyleAttr){}
public void MyView(Context context , AttributeSet attrs , int defStyleAttr,int defStyleRes){}
可以看出,关于view构造函数的参数有多有少,先排除几个不常用的,留下常用的。
四个参数的构造是在API21的时候添加的,暂不考虑
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); }
一般情况下三个参数和四个参数的构造函数不经常会被用到,暂时都可以不考虑,
对于一个参数和两个参数的构造函数,他们的详情如下:
//一般在直接New一个View的时候调用。public void SloopView(Context context) {}//一般在layout文件中使用的时候会调用,关于它的所有属性(包括自定义属性)都会包含在attrs中传递进来。public void SloopView(Context context, AttributeSet attrs) {}
调用一个参数的情况:
//在Avtivity中SloopView view = new SloopView(this);
调用两个参数的构造的情况:
//在layout文件中 - 格式为: 包名.View名<com.sloop.study.SloopViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"/>
2、测量View大小(onMeasure)
@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int widthsize = MeasureSpec.getSize(widthMeasureSpec); //取出宽度的确切数值int widthmode = MeasureSpec.getMode(widthMeasureSpec); //取出宽度的测量模式int heightsize = MeasureSpec.getSize(heightMeasureSpec); //取出高度的确切数值int heightmode = MeasureSpec.getMode(heightMeasureSpec); //取出高度的测量模式}
这篇关于Android自定义控件使用到的理论知识(-)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!