项目中时常会用到相同的布局,如果每个页面都复制一遍,然后改一下Id,这样的当然可以,不过,不免麻烦,我
们就写一个自己的布局,即自定义组合控件。
我们就以典型的头最为模型,来开始我们的自定义组合控件,其实很简单。
1.先写一个布局,给上Id,定好样式:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#3fc500">
<RelativeLayout
android:id="@+id/back"
android:layout_width="60dp"
android:layout_height="match_parent">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@mipmap/back"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="15dp"/>
</RelativeLayout>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:gravity="center"
android:text="我的"
android:textColor="#ffffff"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="20sp" />
</RelativeLayout>
2.新建一个自定义的类TitleView:
public class TitleView extends RelativeLayout {
private RelativeLayout relativeLayout;
private TextView textView;
public TitleView(Context context, AttributeSet attrs) {
super(context, attrs);
//加载布局
LayoutInflater.from(context).inflate(R.layout.title_bar, this);
//查找控件
relativeLayout = (RelativeLayout) findViewById(R.id.back);
textView = (TextView) findViewById(R.id.textView);
}
//RelativityLayout的点击监听
public void setRelativeLayoutListener(OnClickListener listener) {
relativeLayout.setOnClickListener(listener);
}
//为Text设置标题
public void setTitleText(String title){
textView.setText(title);
}
}
3.使用:只需要像使用普通控件一样使用就可以了:
public class SecondActivity extends AppCompatActivity {
private TitleView titleView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
titleView = (TitleView) findViewById(R.id.title2);
findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(SecondActivity.this, ThirdActivity.class));
}
});
titleView.setRelativeLayoutListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
titleView.setTitleText("第二个Activity");
}
}