自定义 View 是每个Android 都经常接触的,说来惭愧,我到现在对它的三个构造方法还是一知半解,平时只 copy,接错,现在好好补补这些基础知识

很多时候系统自带的View满足不了设计的要求,就需要自定义View控件。

自定义View首先要实现一个继承自View的类。添加类的构造方法,override父类的方法,如onDraw,(onMeasure)等。如果自定义的View有自己的属性,需要在values下建立attrs.xml文件,在其中定义属性,同时代码也要做修改。

1. 一个参数
第一属于程序内实例化时采用,之传入Context即可

public class MyView extends TextView{    public MyView(Context context) {       super(context);       // TODO Auto-generated constructor stub    }}public class NewView extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //setContentView(R.layout.activity_newview);        setContentView(new MyView(this));    }}



这样一个简单的自定义View就可以使用了。可以改变一下背景颜色,在MyView类中添加

protected void onDraw(Canvas canvas) {   // TODO Auto-generated method stub   super.onDraw(canvas);   canvas.drawColor(Color.BLUE);}



2. 两个参数
第二个用于layout文件实例化,会把XML内的参数通过AttributeSet带入到View内

public MyView(Context context,AttributeSet attrs){       super(context, attrs);  }//命名空间,有了它,才能用自定义属性xmlns:test="http://schemas.android.com/apk/res-auto"      />


values/attrs.xml 这个是自定义属性的文件

                  


完成上面的两步之后就可以在代码中实例化这个布局文件了

setContentView(new MyView(this));


自定义属性代码中示例:   

 public MyView(Context context, AttributeSet attrs) {        super(context, attrs);        mPaint = new Paint();        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView);        int textColor = a.getColor(R.styleable.MyView_textColor, Color.BLACK);        float textSize = a.getDimension(R.styleable.MyView_textSize, 36);        mPaint.setTextSize(textSize);        mPaint.setColor(textColor);        a.recycle();    }



官方解释

Constructor that is called when inflating a view from XML. This is called when a view is being constructed from an XML file, supplying attributes that were specified in the XML file. This version uses a default style of 0, so the only attribute values applied are those in the Context’s Theme and the given AttributeSet

大致应该是这个方法是通过xml文件来创建一个view对象的时候调用。很显然xml文件一般是布局文件,就是现实控件的时候调用,而布局文件中免不了会有属性的设置,如android:layout_width等,对这些属性的设置对应的处理代码也在这个方法中完成

3. 三个参数
第三个主题的style信息,也会从XML里带入

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

 

转自:https://blog.csdn.net/u011033906/article/details/55113413

更多相关文章

  1. Android(安卓)动态权限申请之 shouldShowRequestPermissionRatio
  2. Android(安卓)root 原理
  3. 又议android中的manifest清单文件
  4. android droiddraw 这么简单的功能都实现不了么?JAVA真不是人写的
  5. Android(安卓)项目编译过程
  6. android:theme和app:popupTheme的作用,以及在android 3.0以下不起
  7. Android(安卓)Log 及eclipse中文乱码
  8. Android中文件读写错误 open failed: ENOENT (No such file or d
  9. 在Android(安卓)Studio中查看Sqlite数据内容的方法

随机推荐

  1. 设置STDIN_FILENO为非阻塞模式
  2. TQ210 —— 嵌入式Linux根文件系统的设计
  3. Linux netstat命令详解(转)
  4. iostat查看系统I/O负载
  5. linux 内核编译配置内核make menuconfig
  6. 如何从VS2015中实现Mono框架?
  7. QNX与Linux两家未来有望独霸车载电子操作
  8. linux编程之国际化和本地化
  9. linux使用技巧,返回上一次目录
  10. Linux下获得本机IP(非127.0.0.1)