package com.anthony.inputlayout.layout; import android.content.Context; import android.content.res.TypedArray; import android.support.annotation.IdRes; import android.util.AttributeSet; import android.view.View; import android.widget.RelativeLayout; public abstract class BaseCustomCompositeView extends RelativeLayout implements View.OnClickListener { public BaseCustomCompositeView(Context context) { this(context, null); } public BaseCustomCompositeView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public BaseCustomCompositeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); View.inflate(context, getLayoutId(), this); initView(); setListener(); initAttrs(context, attrs); processLogic(); } private void initAttrs(Context context, AttributeSet attrs) { TypedArray typedArray = context.obtainStyledAttributes(attrs, getAttrs()); final int N = typedArray.getIndexCount(); for (int i = 0; i < N; i++) { initAttr(typedArray.getIndex(i), typedArray); } typedArray.recycle(); } protected abstract int getLayoutId(); protected abstract void initView(); protected abstract void setListener(); protected int[] getAttrs() { return new int[0]; } protected void initAttr(int attr, TypedArray typedArray) { } protected abstract void processLogic(); @Override public void onClick(View view) { } /** * 查找View * * @param id 控件的id * @param <VT> View类型 * @return */ protected <VT extends View> VT getViewById(@IdRes int id) { return (VT) findViewById(id); } }