packagecom.example.androidviewlearn;importandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.content.res.TypedArray;importandroid.graphics.drawable.Drawable;importandroid.os.Trace;importandroid.util.AttributeSet;importandroid.view.Gravity;importandroid.view.View;importandroid.widget.Button;importandroid.widget.RelativeLayout;importandroid.widget.TextView;public class TopBar extendsRelativeLayout {//获取自定义的类型数组s
privateTypedArray ta;private intmLeftTextColor;privateDrawable mLeftBackground;privateString mLeftText;private intmRightTextColor;privateDrawable mRightBackground;privateString mRightText;private intmTitleTextSize;private intmTitleTextColor;privateString mTtile;privateButton mLeftButton;privateButton mRightButton;privateTextView mTitleView;privateLayoutParams mLeftLayoutParams;privateLayoutParams mRightLayoutParams;privateLayoutParams mTitleLayoutParams;privateTopBarClickListener mBarClickListener;//三个构造函数,一般采用这些写法。
publicTopBar(Context context) {this(context, null);//TODO Auto-generated constructor stub
}publicTopBar(Context context, AttributeSet attrs) {this(context, attrs, 0);//TODO Auto-generated constructor stub
}
@SuppressLint("NewApi")public TopBar(Context context, AttributeSet attrs, intdefStyleAttr) {super(context, attrs, defStyleAttr);//TODO Auto-generated constructor stub//获取布局中设置的自定义属性
getStyleValue(context, attrs);//初始化控件,并且把属性值设置进去
initView(context);//设置各个控件的布局
setLayout();
}/*** 设置自定义空间的布局属性*/
private voidsetLayout() {
mLeftLayoutParams= newLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
mLeftLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);
addView(mLeftButton, mLeftLayoutParams);
mRightLayoutParams= newLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
mRightLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
addView(mRightButton, mRightLayoutParams);
mTitleLayoutParams= newLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
mTitleLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);
addView(mTitleView, mTitleLayoutParams);
}
@SuppressLint("NewApi")/*** 初始化控件,并且给空间赋予属性和事件
*@paramcontext*/
private voidinitView(Context context) {
mLeftButton= newButton(context);
mRightButton= newButton(context);
mTitleView= newTextView(context);
mLeftButton.setTextColor(mLeftTextColor);
mLeftButton.setText(mLeftText);
mLeftButton.setBackground(mLeftBackground);
mLeftButton.setOnClickListener(newOnClickListener() {
@Overridepublic voidonClick(View paramView) {//TODO Auto-generated method stub
mBarClickListener.leftClick();
}
});
mRightButton.setOnClickListener(newOnClickListener() {
@Overridepublic voidonClick(View paramView) {//TODO Auto-generated method stub
mBarClickListener.rightClick();
}
});
mRightButton.setTextColor(mRightTextColor);
mRightButton.setText(mRightText);
mRightButton.setBackground(mRightBackground);
mTitleView.setText(mTtile);
mTitleView.setTextColor(mTitleTextColor);
mTitleView.setTextSize(mTitleTextSize);
mTitleView.setGravity(Gravity.CENTER);
}/*** 获取自定义空间上的style
*@paramcontext
*@paramattrs*/
private voidgetStyleValue(Context context, AttributeSet attrs) {
ta=context.obtainStyledAttributes(attrs, R.styleable.TopBar);
mLeftTextColor= ta.getColor(R.styleable.TopBar_leftTextColor, 0);
mLeftBackground=ta.getDrawable(R.styleable.TopBar_leftBackground);
mLeftText=ta.getString(R.styleable.TopBar_leftText);
mRightTextColor= ta.getColor(R.styleable.TopBar_rightTextColor, 0);
mRightBackground=ta.getDrawable(R.styleable.TopBar_rightBackground);
mRightText=ta.getString(R.styleable.TopBar_rightText);
mTitleTextSize= ta.getDimensionPixelSize(R.styleable.TopBar_titleTextSize, 10);
mTitleTextColor= ta.getColor(R.styleable.TopBar_titleTextColor, 0);
mTtile=ta.getString(R.styleable.TopBar_title);
ta.recycle();
}publicTopBarClickListener getmBarClickListener() {returnmBarClickListener;
}public voidsetBarClickListener(TopBarClickListener mBarClickListener) {this.mBarClickListener =mBarClickListener;
}/*** id=1标识→_→,id-0标识左边
*
*@paramid
*@paramflag*/
public void setButtonVisable(int id, booleanflag) {if(flag) {if (id == 0) {
mLeftButton.setVisibility(View.VISIBLE);
}else{
mRightButton.setVisibility(View.VISIBLE);
}
}else{if (id == 0) {
mLeftButton.setVisibility(View.GONE);
}else{
mRightButton.setVisibility(View.GONE);
}
}
}
}