android 原理 组合控件_android 组合方式自定义控件

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);

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值