在毕设项目中多处用到自定义布局,一直打算总结一下自定义布局的实现方式,今天就来总结一下吧。在此之前学习了郭霖大神博客上面关于自定义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