我们先看一下实现效果:
使用xml自定义控件
使用代码自定义控件
首先我们创建一个工程
创建完毕之后再创建一个类来管理我们自定义的控件。
由于我们的控件水平方向分布的,因此比较适合使用线性布局
如下:我们创建一个类继承于LinearLayout用于管理自定义控件
然后我们需要实现父类LinearLayout的构造方法,并在构造方法中编写一个函数初始化我们自定的控件
注:此处为了避免init()函数的重复使用,我们将构造函数做了改动,只在第二个构造方法里调用init();方法
我们先来为我们的自定义控件初始化一些属性,并用代码的方式实现自定义控件。
然后我们在style里面将parent属性设置为NoActionBar以显示我们后来设置的导航条。
然后Main函数里面创建并调用它
注:以下这种方式将我们定义的bar控件作为Activity的主视图,但是会使该控件的长和宽全部变成match_parent
用xml创建如下:
自定义属性步骤如下:
(1)在values里面创建一个resource file 命名为navigation
(2)使用declare-styleable关键字修饰
(3)添加属性名称和对应的值的类型
(4)获取xml中的属性和值
注:使用对应get方法从TypedArray中取出对应的属性的值
TypedArray是一个通过上下文的对象 context.obtainStyledAttributes(AttributeSet,int[],int,int)方法或者context.obtainAttributes(AttributeSet,int[]) 获取到的数组数值的容器。确保使用完 TypedArray 对象之后,调用TypedArray对象的recycle()方法回收资源。通常通过它的obtainStyledAttributes方法获取到相应位置的数值。;
调用:
再回到代码的方式创建:
首先 ,在我们定义的管理自定义控件的类中编写函数以设置控件的属性
然后编写一个函数实现代码方式创建自定义控件,并在主函数中调用该函数实现创建。使主函数看起来简洁美观。
将继承改为RelativeLayout
然后我们编写函数为按钮设置标题、以及位置
然后我们为按钮添加点击事件
注意!!此处是重难点
第一步,定义一个接口,监听按钮的点击事件
第二步,记录监听按钮事件的对象
然后我们为按钮添加点击事件,把相应的事件传出去
我们在MainActivity中将监听者设置为控件本身:
那么我们就需要继承我们定义的接口,并实现接口的方法
感悟:
这个简书写的是真滴爽,视频又刷了一边,收获满满!!