博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义View三个方法的意义
阅读量:4285 次
发布时间:2019-05-27

本文共 2684 字,大约阅读时间需要 8 分钟。

自定义 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)

Perform inflation from XML and apply a class-specific base style. This constructor of View allows subclasses to use their own base style when they are inflating. For example, a Button class’s constructor would call this version of the super class constructor and supply R.attr.buttonStyle fordefStyle; this allows the theme’s button style to modify all of the base view attributes (in particular its background) as well as the Button class’s attributes.

第四个参数要求最低 API 21,不是很清楚什么意思,没用过

转载地址:http://popgi.baihongyu.com/

你可能感兴趣的文章
java相关的生命周期
查看>>
java之权限控制相关、缓存禁用
查看>>
iOS之cocoaPods发布产品详解
查看>>
java之国际化
查看>>
java 之注解
查看>>
java之struts(二)国际化、拦截器
查看>>
iOS之真机和模拟器的CPU架构器架构\Xcode中和symbols有关的几个设置
查看>>
java之maven的使用/eclipse中maven项目部署到tomcat的几种方法
查看>>
iOS之常用分类frame、button、
查看>>
微信小程序常用快捷键
查看>>
小程序中相关控件的使用、样式的使用、flex布局
查看>>
开篇词
查看>>
论文笔记:Event Detection with Trigger-Aware Lattice Neural Network
查看>>
《Recurrent Chunking Mechanisms for Long-Text Machine Reading Comprehension》--论文分享
查看>>
论文笔记丨Multi-Level Matching and Aggregation Network for Few-Shot Relation Classification
查看>>
论文笔记 | All NLP Tasks Are Generation Tasks: A General Pretraining Framework
查看>>
论文笔记 | Towards Interpreting BERT for Reading Comprehension Based QA
查看>>
论文笔记 | Transformer-XL:Attentive Language Models Beyond a Fixed-Length Context
查看>>
论文笔记 | An End-to-End Deep Framework for Answer Triggering with a Novel Group-Level Objective
查看>>
论文笔记:Exploiting WordNet Synset and Hypernym Representations for Answer Selection
查看>>