Android自定义布局的三种实现方式

  在毕设项目中多处用到自定义布局,一直打算总结一下自定义布局的实现方式,今天就来总结一下吧。在此之前学习了郭霖大神博客上面关于自定义View的几篇博文,感觉受益良多,本文中就参考了其中的一些内容。

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

(一)组合控件

  组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件。比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件,那么下面将通过实现一个简单的标题栏自定义控件来说说组合控件的用法。

1、新建一个Android项目,创建自定义标题栏的布局文件title_bar.xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="wrap_content"
 5     android:background="#0000ff" >
 6
 7     <Button
 8         android:id="@+id/left_btn"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_centerVertical="true"
12         android:layout_margin="5dp"
13         android:background="@drawable/back1_64" />
14
15     <TextView
16         android:id="@+id/title_tv"
17         android:layout_width="wrap_content"
18         android:layout_height="wrap_content"
19         android:layout_centerInParent="true"
20         android:text="这是标题"
21         android:textColor="#ffffff"
22         android:textSize="20sp" />
23
24 </RelativeLayout>

  可见这个标题栏控件还是比较简单的,其中在左边有一个返回按钮,背景是一张事先准备好的图片back1_64.png,标题栏中间是标题文字。

2、创建一个类TitleView,继承自RelativeLayout:

 1 public class TitleView extends RelativeLayout {
 2
 3     // 返回按钮控件
 4     private Button mLeftBtn;
 5     // 标题Tv
 6     private TextView mTitleTv;
 7
 8     public TitleView(Context context, AttributeSet attrs) {
 9         super(context, attrs);
10
11         // 加载布局
12         LayoutInflater.from(context).inflate(R.layout.title_bar, this);
13
14         // 获取控件
15         mLeftBtn = (Button) findViewById(R.id.left_btn);
16         mTitleTv = (TextView) findViewById(R.id.title_tv);
17
18     }
19
20     // 为左侧返回按钮添加自定义点击事件
21     public void setLeftButtonListener(OnClickListener listener) {
22         mLeftBtn.setOnClickListener(listener);
23     }
24
25     // 设置标题的方法
26     public void setTitleText(String title) {
27         mTitleTv.setText(title);
28     }
29 }

  在TitleView中主要是为自定义的标题栏加载了布局,为返回按钮添加事件监听方法,并提供了设置标题文本的方法。

3、在main_activity.xml中引入自定义的标题栏:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:id="@+id/main_layout"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6
 7     <com.example.test.TitleView
 8         android:id="@+id/title_bar"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content" >
11     </com.example.test.TitleView>
12
13 </LinearLayout>

4、在MainActivity中获取自定义的标题栏,并且为返回按钮添加自定义点击事件:

 1      private TitleView mTitleBar;
 2      mTitleBar = (TitleView) findViewById(R.id.title_bar);
 3
 4         mTitleBar.setLeftButtonListener(new OnClickListener() {
 5
 6             @Override
 7             public void onClick(View v) {
 8                 Toast.makeText(MainActivity.this, "点击了返回按钮", Toast.LENGTH_SHORT)
 9                         .show();
10                 finish();
11             }
12         });

  这样就用组合的方式实现了自定义标题栏,其实经过更多的组合还可以创建出功能更为复杂的自定义控件,比如自定义搜索栏等。

(二)自绘控件

Refer:http://blog.csdn.net/guolin_blog/article/details/17357967

时间: 2024-10-15 17:47:59

Android自定义布局的三种实现方式的相关文章

Android自定义View的三种实现方式

在毕设项目中多处用到自定义控件,一直打算总结一下自定义控件的实现方式,今天就来总结一下吧.在此之前学习了郭霖大神博客上面关于自定义View的几篇博文,感觉受益良多,本文中就参考了其中的一些内容. 总结来说,自定义控件的实现有三种方式,分别是:组合控件.自绘控件和继承控件.下面将分别对这三种方式进行介绍. (一)组合控件 组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件.比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件,那么下面将通过实现一个简单

Android 中的 Service 三种启动方式

1.start Service    不会随着activity finish 而关闭,必须调用 stop方法 每次调用都会调用onstart方法 package com.weidingqiang.customnetroid; import android.app.Service; import android.content.Intent; import android.os.Bundle; import android.os.IBinder; import android.util.Log;

【Android进度条】三种方式实现自定义圆形进度条ProgressBar

一.通过动画实现 定义res/anim/loading.xml如下: [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <animation-list android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> &

android中填充界面布局的三种方式

改变原来界面布局的三种方式: 1.第一种方式: LayoutInflater li = LayoutInflater.from(this); 具体代码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activ

Android学习之XML数据的三种解析方式以及生成XML文件

首先,我得声明,本博客的思想主要参考了此博客:http://blog.csdn.net/liuhe688/article/details/6415593 不过代码我自己一句句敲的 好了,首先讲一下解析XML的三种方式:(恕我粘贴一下哈) SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方

实现自定义View的三种方式

一.组合控件 组合控件,顾名思义,就是将系统原有的控件进行组合,构成一个新的控件.这种方式下,不需要开发者自己去绘制图上显示的内容,也不需要开发者重写onMeasure,onLayout,onDraw方法来实现测量.布局以及draw流程.所以,在实现自定义view的三种方式中,这一种相对比较简单. 实际开发中,标题栏就是一个比较常见的例子.因为在一个app的各个界面中,标题栏基本上是大同小异,复用率很高.所以经常会将标题栏单独做成一个自定义view,在不同的界面直接引入即可,而不用每次都把标题栏

iOS_Swift初识之使用三种回调方式自定义Button

最近在学习Swift ,发现青玉伏案大神早期用OC写的一篇博客--IOS开发之自定义Button(集成三种回调模式)  很适合用来熟悉Swift的回调方式,于是我就用Swift翻版了一下,具体实现原理就不多说了,主要贴上Swift的代码给大家看看.由于刚开始了解Swift,有使用不恰当的地方请轻拍.... 上代码: 1.新建一个xib,拖一个UIView到界面上,绑定上自定义的UIView类,拖一个UILabel到view上,写上Button假装是个UIButton:并将label拖到代码当中

详解android解析Xml的三种方式——DOM、SAX以及XMLpull

今天学习了android解析Xml的三种方式——DOM.SAX以及XMLpull,这里对它们进行总结. 如果理解有误,欢迎指正   ^_* 一.DOM方式解析: xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据.这个写起来很简单,但是很消耗内存.要是数据过大,手机不够牛逼,可能手机直接死机. 常用的DoM接口和类: Document:该接口定义分析并创建DOM文档的一系列方法,它是文档树的根,是操作DOM的基础.Element:该接口继承Node接口,提供了获

Android处理XML的三种方式

http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html http://blog.csdn.net/zzp16/article/details/7795410 http://www.ibm.com/developerworks/cn/xml/x-android/ http://www.cnblogs.com/devinzhang/archive/2012/01/16/2323668.html http://mobile.