1.首先实现一个类 对View继承,并实现构造方法,并调用初始化view的方法并传递context及布局文件设置的属性
public class TitleView extends RelativeLayout {
public TitleView(Context context) {
this(context, null);
}
public TitleView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context,attrs);
}
}
2.再values目录下创建attrs.xml文件,定义一个titleview的标签,并在标签内添加几个属性
<resources>
<declare-styleable name="TitleView">
<attr name="showback" format="boolean"></attr>
<attr name="title" format="string"></attr>
<attr name="showfun" format="boolean"></attr>
</declare-styleable>
...
</resources>
3.创建titleview的布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp">
<TextView
android:id="@+id/view_title_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="#ffffff"
android:textSize="19sp" />
<ImageView
android:id="@+id/view_title_back"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginStart="30dp"
android:padding="10dp"
android:src="@drawable/ic_back" />
<ImageView
android:id="@+id/view_title_connect"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentEnd="true"
android:layout_marginEnd="30dp"
android:padding="10dp"
android:src="@drawable/ic_setting" />
</RelativeLayout>
4.再initView()方法中加载布局界面,并设置styleable的属性
private void initView(Context context, AttributeSet attrs) {
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TitleView);
View view = LayoutInflater.from(context).inflate(R.layout.view_title, this, true);
TextView tvName = view.findViewById(R.id.view_title_name);
ImageView ivBack = view.findViewById(R.id.view_title_back);
tvName.setText(ta.getString(R.styleable.TitleView_title));
if (ta.getBoolean(R.styleable.TitleView_showback, false)) {
ivBack.setVisibility(View.VISIBLE);
} else {
ivBack.setVisibility(View.GONE);
}
}
5.调用当前创建的View即可