android 标题栏的几种,Android标题栏的几种解决思路

第一种方式:标题栏写成控件

第一步:定义标题栏用到的属性,在/values下新建attrs文件,添加属性,其中reference|color代表既可以用图片,也可以定义成一种颜色。

第二步,自定义TopTitle,继承RelativeLayout(ViewGroup),获取attrs中的属性

//获取typedarray里面的属性

private void initAttrs(AttributeSet attrs) {

TypedArray ta = ctx.obtainStyledAttributes(attrs, R.styleable.TopTitle);

title = ta.getString(R.styleable.TopTitle_title);

titleTextColor = ta.getColor(R.styleable.TopTitle_titleTextColor, 0);

titleTextSize = ta.getDimensionPixelSize(R.styleable.TopTitle_titleTextSize, 12);

leftText = ta.getString(R.styleable.TopTitle_leftText);

rightText = ta.getString(R.styleable.TopTitle_rightText);

leftBackgroud = ta.getDrawable(R.styleable.TopTitle_leftBackgroud);

rightBackgroud = ta.getDrawable(R.styleable.TopTitle_rightBackgroud);

}

第三步,创建需要用到的控件,标题栏,和两个按钮(可自行添加)

//分别为标题显示、左右两个button

tvTitle = new TextView(ctx);

leftBtn = new Button(ctx);

righttBtn = new Button(ctx);

//设置属性值

tvTitle.setText(title);

tvTitle.setTextColor(titleTextColor);

tvTitle.setTextSize(titleTextSize);

tvTitle.setGravity(Gravity.CENTER);

leftBtn.setText(leftText);

leftBtn.setBackgroundDrawable(leftBackgroud);

righttBtn.setText(rightText);

righttBtn.setBackgroundDrawable(rightBackgroud);

//控制显示位置

LayoutParams titleParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

titleParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);

addView(tvTitle, titleParams);

//控制显示位置

LayoutParams leftBtnParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

leftBtnParams.addRule(RelativeLayout.ALIGN_LEFT, TRUE);

addView(leftBtn, leftBtnParams);

//控制显示位置

LayoutParams rightBtnParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);

rightBtnParams.addRule(RelativeLayout.ALIGN_RIGHT, TRUE);

addView(righttBtn, rightBtnParams);

//为两个按钮设置监听,通过接口方式对外提供

leftBtn.setTag(LEFT_BUTTON);

righttBtn.setTag(RIGHT_BUTTON);

leftBtn.setOnClickListener(this);

righttBtn.setOnClickListener(this);

第四步,对外暴露接口

public void setOnToptitleClickListener(ToptitleClickListener listener) {

this.mToptitleClickListener = listener;

}

@Override

public void onClick(View v) {

switch ((int) v.getTag()) {

case LEFT_BUTTON:

mToptitleClickListener.leftClick();

break;

case RIGHT_BUTTON:

mToptitleClickListener.rightClick();

break;

default:

break;

}

}

第五步:开始应用,在xml文件中

xmlns:toptitle="http://schemas.android.com/apk/res-auto"

第六步:在activity中跟普通控件一样使用

topTitle= (TopTitle) findViewById(R.id.top_title);

topTitle.setOnToptitleClickListener(new TopTitle.ToptitleClickListener() {

@Override

public void leftClick() {

Toast.makeText(MainActivity.this,"这是左边",Toast.LENGTH_SHORT).show();

}

@Override

public void rightClick() {

Toast.makeText(MainActivity.this,"这是右边",Toast.LENGTH_SHORT).show();

}

});

总结

此种方式较为繁琐复杂,只是一种思路,不推荐使用,更推荐下面几种方式。

第二种方式:自定义ViewGroup

此种方式较为简单,实现与第一种类似,但比第一种更为简单

1.写顶部xml布局

e93d74f78104bac5bf0f33cdd4ca4d4f.png

2.自定义viewgroup

public class TopTitleViewextends LinearLayout{

private LinearLayout mTopBack;

public TextView mTvBack;

public TextView mTvTitle;

public ImageView mIvRight;

public TextView mTvRight;

private Activity mActivity;

public TopTitleView(Context context) {

super(context);

}

public TopTitleView(Context context, AttributeSet attrs) {

super(context, attrs);

LayoutInflater.from(context).inflate(R.layout.top_bar_view, this, true);

mTopBack=(LinearLayout)this.findViewById(R.id.top_back_btn);

mTvBack=(TextView)this.findViewById(R.id.top_back_tv);

mTvTitle=(TextView)this.findViewById(R.id.top_title);

mTvRight=(TextView)this.findViewById(R.id.top_right_tv);

mIvRight=(ImageView)this.findViewById(R.id.top_right_btn);

mTopBack.setOnClickListener(onClickListener);

mTvRight.setOnClickListener(onClickListener);

mIvRight.setOnClickListener(onClickListener);

}

private OnClickListener onClickListener = new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch(v.getId()) {

case R.id.top_back_btn:

if(mActivity!=null)

mActivity.finish();

break;

case R.id.top_right_tv:

break;

case R.id.top_right_btn:

break;

}

}

};

public void setActivity(Activity activity) {

this.mActivity=activity;

}

public void setTitle(String title) {

mTvTitle.setText(title);

}

public void setRightText(String text) {

mTvRight.setText(text);

}

}

3.usage in xmls

4.usage in activities

mTopBar.setActivity(this);

mTopBar.setTitle("这是哪一页");

5.总结,个人比较喜欢这种方式,方便快捷,简单。

第三种方式:把标题栏写进BaseActivity

8-12

第四种方式:用android自带Actionbar、Toolbar

8-13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值