Android Studio 创建自定义控件的方法
我们知道,当系统控件并不能满足我们的需求时,我们就需要来创建自定义控件,主要有两种方法
(1)引入布局
下面来自定义一个控件,iphone的标题栏,创建一个标题栏并不是什么难事,加入两个button一个textview就行了,可是在我们的应用中,有很多页面都是需要这样的标题栏,我们不可能每个活动都写一遍布局,这个时候我们就可以用引用布局的方法,新建一个title.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#817d7d" > <button android:id="@+id/title_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:text="back" android:textcolor="#fff"/> <textview android:id="@+id/title_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:textcolor="#c0c0c0" android:textsize="24sp" android:text="title text" /> <button android:id="@+id/title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:textcolor="#fff" android:text="edit" /> </linearlayout>
现在标题栏已经写好了,接下来就要在程序中使用,修改activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/title"/> </linearlayout>
我们只要通过一句include语句引进来就行了
<include layout="@layout/title"/>
最后我们需要在mainactivity中将系统自带的标题栏屏蔽
package com.example.ch03; import android.drm.drmstore; import android.support.v7.app.actionbar; import android.support.v7.app.appcompatactivity; import android.os.bundle; public class mainactivity extends appcompatactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //屏蔽系统自带状态栏 actionbar actionbar = getsupportactionbar(); if(actionbar != null){ actionbar.hide(); } } }
最后来看一下效果
(2)注册点击事件
在上面我们看到,每个界面的返回按钮功能都是一样的,即销毁当前活动,我们不可能在每个活动中都重新注册,所以使用自定义控件的方式来解决
新建titlelayout,成为标题栏控件
public class titlelayout extends linearlayout { public titlelayout(context context, attributeset attrs){ super(context,attrs); layoutinflater.from(context).inflate(r.layout.title,this);
我们重写了linearlayout中带参数的构造函数,引入titlelayout控件就会调用这个构造函数,然后对标题栏进行动态加载,就需要借助layoutinflater实现。通过layoutinflater的from方法构建一个layoutinflater对象,调用inflate()方法动态加载一个布局文件
然后在布局文件中添加自定义控件,修改activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.ch03.titlelayout android:layout_width="match_parent" android:layout_height="wrap_content"/> </linearlayout>
重新运行一下,效果是一样的
下面来给按钮注册点击事件,修改titlelayout中的代码
package com.example.ch03; import android.app.activity; import android.content.context; import android.util.attributeset; import android.view.layoutinflater; import android.view.view; import android.widget.button; import android.widget.linearlayout; import android.widget.toast; public class titlelayout extends linearlayout { public titlelayout(context context, attributeset attrs){ super(context,attrs); layoutinflater.from(context).inflate(r.layout.title,this); button titleback = findviewbyid(r.id.title_back); button titleedit = findviewbyid(r.id.title_edit); titleback.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { ((activity) getcontext()).finish(); } }); titleedit.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { toast.maketext(getcontext(),"you click edit button", toast.length_long).show(); } }); } }
重新运行一下,然后点击edit按钮
到此这篇关于android studio 创建自定义控件的方法的文章就介绍到这了,更多相关android studio自定义控件内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: Vue+tracking.js 实现前端人脸检测功能
下一篇: Struts 2三种方式实现Ajax
推荐阅读
-
Android 入门第十讲02-广播(广播概述,使用方法(系统广播,自定义广播,两个activity之间的交互和传值),EventBus使用方法,数据传递,线程切换,Android的系统广播大全)
-
Android中选项菜单(OptionMenu)的创建方法
-
Android自定义控件实现icon+文字的多种效果
-
Android编程获取控件宽和高的方法总结分析
-
Android 自定义弹性ListView控件实例代码(三种方法)
-
Android编程实现自定义系统菜单背景的方法
-
Android布局之LinearLayout自定义高亮背景的方法
-
浅谈Android开发中ListView控件性能的一些优化方法
-
Android中控件GridView实现设置行列分割线的方法示例
-
Android自定义Button并设置不同背景图片的方法