引入布局文件
很多活动中某一个局部布局一致,避免代码冗余,可以定义一个布局文件,而在其他布局文件中引入此布局文件,代码就会变得简洁
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="@drawable/title_bg" >
<Button
android:id="@+id/title_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dip"
android:background="@drawable/back_bg"
android:text="Back"
android:textColor="#fff" />
<TextView
android:id="@+id/title_text"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="This is Title"
android:textColor="#fff"
android:textSize="22sp" />
<Button
android:id="@+id/title_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dip"
android:background="@drawable/edit_bg"
android:text="Edit"
android:textColor="#fff" />
</LinearLayout>
在XML文件中引入一个布局文件代码:
<include layout="ID" />
自定义控件
引入一个布局文件,布局文件中的某些控件在活动中的功能一致,我们就可以自定义一个控件,为此控件中的控件添加动作,响应事件,减少代码冗余
- 创建自定义控件
上面我们使用的是LinearLayout布局,这里我们自定义的布局类需要继承LinearLayout类
public class TitleLayout extends LinearLayout{
//在布局文件中引入这个控件就会调用这个构造函数
public TitleLayout(Context context, AttributeSet attrs){
//对布局文件进行动态加载
LayoutInflater.from(context).inflate(ID, this);
Button titleBack = (Button) findViewById(R.id.title_back);
Button titleEdit = (Button) findViewById(R.id.title_edit);
titleBack.setOnClickListener(new OnClickListener(){
@override
public void onClick(View v){
//加入逻辑代码
}
});
}
}
- 在布局文件中添加自定义控件
添加自定义控件的方式和添加Android中预定义的控件方式基本一样,引入自定义控件需要完整路径(包名+类名)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!--完整路径-->
<com.example.uicustomviews.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
></com.example.uicustomviews.TitleLayout>
</LinearLayout>