在毕设项目中多处用到自定义控件,一直打算总结一下自定义控件的实现方式,今天就来总结一下吧。在此之前学习了郭霖大神博客上面关于自定义视图的几篇博文,感觉受益良多,本文中就参考了其中的一些内容。
总结来说,自定义控件的实现有三种方式,分别是:组合控件,自绘控件和继承控件。下面将分别对这三种方式进行介绍。
组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件。比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件,那么下面将通过实现一个简单的标题栏自定义控件来说说组合控件的用法。
1,新建一个Android项目,创建自定义标题栏的布局文件title_bar.xml:
& lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比; & lt; RelativeLayout xmlns: android=" http://schemas.android.com/apk/res/android " android: layout_width=" match_parent " android: layout_height=" wrap_content " android:背景=" # 0000 ff "比; & lt;按钮 android: id=癅 + id/left_btn” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_centerVertical=" true " android: layout_margin=" 5 dp " android:背景=癅drawable/back1_64”/比; & lt; TextView android: id=癅 + id/title_tv” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_centerInParent=" true " android:文本="这是标题” android:输入textColor=" # ffffff " android: textSize=" 20 sp/比; & lt;/RelativeLayout> >之前可见这个标题栏控件还是比较简单的,其中在左边有一个返回按钮,背景是一张事先准备好的图片back1_64.png,标题栏中间是标题文字。
2,创建一个类TitleView,继承自RelativeLayout:
公开课TitleView RelativeLayout{延伸//返回按钮控件 私人按钮mLeftBtn;//标题电视 私人TextView mTitleTv; 公共TitleView(上下文语境,AttributeSet attrs) { 超级(上下文,attrs);//加载布的局 LayoutInflater.from(上下文).inflate (R.layout.title_bar,);//获取控件 mLeftBtn=(按钮)findViewById (R.id.left_btn); mTitleTv=(TextView) findViewById (R.id.title_tv); }//为左侧返回按钮添加自定义点击事件 公共空间setLeftButtonListener (OnClickListener侦听器){ mLeftBtn.setOnClickListener(听众); }//设置标题的方法 公共空间setTitleText(字符串标题){ mTitleTv.setText(标题); } } >之前在TitleView中主要是为自定义的标题栏加载了布的局,为返回按钮添加事件监听方法,并提供了设置标题文本的方法。
3,在activity_main.xml中引入自定义的标题栏:
& lt; LinearLayout xmlns: android=" http://schemas.android.com/apk/res/android " android: id=癅 + id/main_layout” android: layout_width=" match_parent " android: layout_height=" match_parent " 面向android:=按怪薄北? & lt; com.example.test.TitleView android: id=癅 + id/title_bar” android: layout_width=" match_parent " android: layout_height=皐rap_content”比; & lt;/com.example.test.TitleView> & lt;/LinearLayout> >之前4,在MainActivity中获取自定义的标题栏,并且为返回按钮添加自定义点击事件:
私人TitleView mTitleBar; mTitleBar=(TitleView) findViewById (R.id.title_bar); mTitleBar。setLeftButtonListener(新alt=" Android自定义视图的三种实现方式总结">这样就用组合的方式实现了自定义标题栏,其实经过更多的组合还可以创建出功能更为复杂的自定义控件,比如自定义搜索栏等。
自绘控件的内容都是自己绘制出来的,在视图的onDraw方法中完成绘制。下面就实现一个简单的计数器,每点击它一次,计数值就加1并显示出来。
1,创建对质类,继承自认为,实现OnClickListener接口:
公共类对质扩展视图实现> & lt; LinearLayout xmlns: android=" http://schemas.android.com/apk/res/android " android: id=癅 + id/main_layout” android: layout_width=" match_parent " android: layout_height=" match_parent " 面向android:=按怪薄北? & lt; com.example.test.CounterView android: id=癅 + id/counter_view” android: layout_width=" 100 dp” android: layout_height=" 100 dp” android: layout_gravity=" center_horizontal |” android: layout_margin=" 20 dp/比; & lt;/LinearLayout>Android自定义视图的三种实现方式总结