一.自定义View构造方法说明

 

 

1.构造方法1

public MyView(Context context) {     super(context);}

 

 

2.构造方法2

public MyView(Context context,AttributeSet attrs){   super(context, attrs);}

 

 

3.构造方法3

public MyView(Context context,AttributeSet attrs,int defStyleAttr){   super(context, attrs, defStyleAttr);}

 

 

 

4.构造方法4

public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {     super(context, attrs, defStyleAttr, defStyleRes);}

 

 

 

 

5.说明

自定 View 的构造函数的参数最多有四个,不过有四个参数的构造函数只能在 API 21 以上使用,因此四个参数的构造函数先不考虑,不过我们也需要了解这四个参数具体代表什么。

 

参数1:Context: View 中随处都会用到 

参数2:AttributeSet: XML 属性(从 XML inflate 的时候使用) 

参数3:int defStyleAttr: 应用到 View 的默认风格(定义在主题中) 

参数4:int defStyleRes: 如果没有使用 defStyleAttr,应用到 View 的默认风格

 

 

6.调用

 

6.1.一个参数的构造方法何时调用:MyView myView=new MyView(this);

 

6.2.两个参数的构造方法何时调用:xml 中添加一个自定义 View ,并且加了一些布局属性,宽高属性以及 margin 属性,这些属性会存放在第二个构造函数的 AttributeSet 参数里。

 

6.3.三个参数的构造方法何时调用:有三个参数的构造函数比第二个构造函数多了一个 int 型的值,名字叫 defStyleAttr ,从名称上判断,这是一个关于自定义属性的参数。第三个构造函数不会被系统默认调用,而是需要我们自己去显式调用,比如在第二个构造函数里调用调用第三个函数,并将第三个参数设为0 。defStyleAttr 指定的是在Theme style 定义的一个 attr,它的类型是 reference 主要生效在 obtainStyledAttributes 方法里,obtainStyledAttributes 方法有四个参数,第三个参数是 defStyleAttr ,第四个参数是自己指定的一个 style ,当且仅当 defStyleAttr 为 0 或者在 Theme 中找不到 defStyleAttr 指定的属性时,第四个参数才会生效,这些指的都是默认属性,当在 xml 里面定义的,就以在 xml 文件里指定的为准,所以优先级大概是:xml>style>defStyleAttr>defStyleRes>Theme 指定,当defStyleAttr 为 0 时,就跳过 defStyleAttr 指定的 reference ,所以一般用 0 就能满足一些基本开发。

 

 

 

 

 

二.attrs.xml文件详解

 

 

1.自定义View步骤

 

1.1.创建控件的类文件,定义其功能逻辑。一般继承自现有控件或者View。


1.2.在res/values目录下创建attrs.xml文件,用于定义该控件的xml标签属性,方便在使用xml声明该控件时设置参数。


1.3.实现该控件的构造器,在构造器中把xml标签属性与后台代码中的变量相连接。

 

 

 

2.具体Demo

 

2.1.自定义View类

public class MyButton extends android.support.v7.widget.AppCompatButton {    private int step;    private String steps;    //构造方法1    public MyButton(Context context){        super(context);    }    //构造方法2    public MyButton(Context context, AttributeSet attrs){        super(context, attrs);        init(attrs);    }    //构造方法3    public MyButton(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        init(attrs);    }    //初始化    private void init(AttributeSet attrs){        if(null!=attrs){            TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.myButton);            step=a.getInt(R.styleable.myButton_step, 0);            steps=a.getString(R.styleable.myButton_steps);            a.recycle();            this.setText(step + ""+steps);        }    }}

 

说明:

 

TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.myButton);step=a.getInt(R.styleable.myButton_step, 0);steps=a.getString(R.styleable.myButton_steps);

 

Android 自定义View 基础知识_第1张图片

 

 

 

 

 

2.2.attrs.xml

                        

 

 

 

 

2.3.布局文件

<?xml version="1.0" encoding="utf-8"?>    

 

 

2.4.Activity代码

public class MyViewActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_myview);    }}

 

 

 

2.5.效果

Android 自定义View 基础知识_第2张图片

 

 

 

 

 

3.attrs.xml文件详解

 

3.1. reference:参考某一资源ID。

    属性定义: 

  

    属性使用:     

color:颜色值。

    属性定义: 

   

   属性使用:

 

 

 

3.3. boolean:布尔值。

    属性定义:    

  

    属性使用:       

 

 

 

3.4. dimension:尺寸值。

    属性定义:

    

    属性使用:
           

 

 

 

3.5. float:浮点值。

    属性定义:     

      

    属性使用:


           

 


3.6. integer:整型值。

    属性定义:     

    

    属性使用:    

 

 


3.7. string:字符串。

    属性定义: 

      

    属性使用:    

 

 

 

3.8. fraction:百分数。

    属性定义:     

    

  属性使用:

 

 

3.9. enum:枚举值。

    属性定义:     

                                  

    属性使用:

 

 

3.10. flag:位或运算。

     属性定义:      

                                            

   属性使用:

                

     

 

     注意:

     属性定义时可以指定多种类型值。

 

    属性定义:    

   


    属性使用:

 

 

 

 

附:View重要的回调方法

 

1.onFinishInflate():在此控件被通过xml声明的方式创建之后调用。



2.onMeasure(in,int):计算本控件的宽高,如果继承自原有控件,则一般不需要重写此方法。



3.onLayout():用于布局控件,对于不是继承ViewGroup的控件,一般不需要重写此方法。 



4.onDraw():在绘制控件时候调用,控件具体长什么样子就在此方法中实现。

 

更多相关文章

  1. android 外部启动activity,自定义action,action常量大全
  2. Android下内核配置make menuconfig出现一大堆未定义的错误
  3. Android自定义dialog简单实现方法
  4. 自定义Toast,兼容那些安装时把通知关掉还问为啥不给提示的测试人
  5. Android:Activity中onCreate方法的参数及用途
  6. Android 中自定义软键盘
  7. Android仿QQ的设置与帮助使用PreferenceActivity 与 自定义Prefe
  8. Android之利用TextWatcher制作自定义编辑文本框

随机推荐

  1. Android(安卓)Studio 将github作为远程ma
  2. Android(安卓)launcher动态Icon的实现方
  3. android 如何用wireshark抓取模拟器的包
  4. Android(安卓)项目中图片压缩看我的blog
  5. 防止Android过快点击造成多次事件的三种
  6. Android(安卓)Studio 项目 Gradle 升级经
  7. Android(安卓)开源项目收集(开源之路险且
  8. ubuntu下安装MyEclipse10和MySql,为MyEcl
  9. Android中自定义加载样式图片的具体实现
  10. Android(安卓)直接显示yuv数据 通过Aweso