Android自定义View

自定义组件相信在面试过程中会经常被问到自定义组件相关问题,最近总结了下自定义View的方式;

总结来说,自定义控件的实现有三种方式,分别是:组合控件、自绘控件和继承控件。下面将分别对这三种方式进行介绍。

(一)组合控件:

像平常项目中,我们会经常自定义一个ToolBar, 多个页面都会需要这个标题栏,为了让代码复用性更强,一般会自定义一个ToolBar;


Android自定义View_第1张图片

带着问题,我们会想到在继承View的构造函数中 有个AttributeSet这个属性,没错  这就是 突破口。

我们可以在attrs.xml中声明自己控件的属性,在布局xml文档中声明自己的命名空间,这时就可以对设置自己想要的值了,然后在AttributeSet这个属性中获取对应的值。好了不多说,我们来看下代码,一切尽在不言中:

第一步:

在/res/values下编写一个attrs.xml的文件,其中内容结构如下:

Android自定义View_第2张图片

第二步:

自定义ToolBar,在构造方法中通过AttributeSet这个属性中获取对应的值。

final TypedArray a =context.obtainStyledAttributes(attrs,R.styleable.MyToolbar,0,0);遍历这个返回的TypedArray然后进行获取定义好的属性值;


Android自定义View_第3张图片

不要忘记添加 xmlns:app="http://schemas.android.com/apk/res-auto",然后就可以直接在自定义view中直接描述定义的属性,入标题,右边按钮的名字等;


Android自定义View_第4张图片

在自定义ToolBar中可以实现一些方法,入按钮的事件监听,设置标题文本的方法:


Android自定义View_第5张图片

(一)自绘控件:

 自绘控件的内容都是自己绘制出来的,在View的onDraw方法中完成绘制。下面就实现一个简单的计数器,每点击它一次,计数值就加1并显示出来。

1、创建CounterView类,继承自View,实现OnClickListener接口:


Android自定义View_第6张图片
Android自定义View_第7张图片

(三)继承控件:

 就是继承已有的控件,创建新控件,保留继承的父控件的特性,并且还可以引入新特性。下面就以支持横向滑动删除列表项的自定义ListView的实现来介绍。

创建CustomListView类,继承自ListView,并实现了OnTouchListener和OnGestureListener接口:


Android自定义View_第8张图片

你可能感兴趣的:(Android自定义View)