一.定義屬性
在xml中定義你所需要的屬性
有關於屬性的介紹可以查看我之前的一篇文章:
https://blog.csdn.net/xxdw1992/article/details/78936532
二.源碼
public class HeadView extends RelativeLayout {
private TextView title, rightTv;
private ImageView leftIv, rightIv;
private OnListener onListener;
public HeadView(Context context) {
this(context, null);
}
public HeadView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public HeadView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
intAttribute(context, attrs, defStyleAttr);
}
/**
* 初始化佈局和屬性
*/
private void intAttribute(Context context, AttributeSet attrs, int defStyleAttr) {
initView(context);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.HeadView);
String titlestr = typedArray.getString(R.styleable.HeadView_title);
String rightTvstr = typedArray.getString(R.styleable.HeadView_right_tv);
if (titlestr != null) {
title.setText(titlestr);
}
if (rightTvstr != null) {
rightTv.setText(rightTvstr);
}
boolean rightIvGone = typedArray.getBoolean(R.styleable.HeadView_rightivgone, false);
boolean leftIvGone = typedArray.getBoolean(R.styleable.HeadView_leftivgone, false);
int rightIvRes = typedArray.getResourceId(R.styleable.HeadView_right_iv, 0);
int leftIvRes = typedArray.getResourceId(R.styleable.HeadView_left_iv, 0);
/*如果設置左邊Iv隱藏,則不設置背景 */
if (leftIvGone) {
leftIv.setVisibility(View.GONE);
} else {
leftIv.setImageResource(leftIvRes);
}
if (rightIvGone) {
rightIv.setVisibility(View.GONE);
} else {
rightIv.setImageResource(rightIvRes);
}
typedArray.recycle();
}
/**
* 初始化控件
*/
private void initView(Context context) {
View view = LayoutInflater.from(context).inflate(R.layout.headiew_layout, this, true);
title = view.findViewById(R.id.title_title);
leftIv = view.findViewById(R.id.title_leftiv);
rightIv = view.findViewById(R.id.right_iv);
rightTv = view.findViewById(R.id.right_tv);
leftIv.setOnClickListener(v -> onListener.leftIv());
rightIv.setOnClickListener(v -> onListener.rightIv());
rightTv.setOnClickListener(v -> onListener.rightTv());
}
public interface OnListener {
/**
* 左邊圖標監聽
*/
void leftIv();
/**
* 右邊圖片監聽
*/
default void rightIv() {
}
/**
* 右邊文字監聽
*/
default void rightTv() {
}
}
/**
* 設置監聽的接口回調
*/
public void setOnViewClick(OnListener click) {
onListener = click;
}
//設置標題
public void setTitle(String str) {
if (!TextUtils.isEmpty(str)) {
title.setText(str);
}
}
//設置標題文字大小
public void setTitleSize(int size) {
if (title != null) {
title.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}
}
//設置右標題文字
public void setRightText(String s) {
if (!TextUtils.isEmpty(s)) {
rightTv.setText(s);
}
}
//設置右標題文字大小
public void setRightTextSize(int size) {
if (rightTv != null) {
rightTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}
}
//設置左圖標資源
public void setLeftDrawable(int res) {
if (leftIv != null) {
leftIv.setVisibility(View.VISIBLE);
leftIv.setImageResource(res);
}
}
//設置右圖標資源
public void setRightDrawable(int res) {
if (rightIv != null) {
rightIv.setVisibility(View.VISIBLE);
rightIv.setImageResource(res);
}
}
}
三.XML中調用
四.注意事項
xml的入口是從第二構造函數進入的,由於我的方法是寫在第三構造函數,要用this調用