android多个标题栏,打造Android通用的标题栏。

一、一款APP少则几十个页面,多则几百个甚至更多,怎样打造通用的标题栏?

方案一:将标题的布局抽取出来,每个页面都include进去。

方案二:抽取一个通用的BaseActivity,加载一个通用的布局,将标题写在通用的布局里面。

方案三:使用Builder模式打造通用的标题栏,抽取一个通用的BaseActivity进行控制管理。

为什么要用Builder设计模式??每个页面的标题基本类似,有些却不一样,使用Builder模式较为适合。

1db990c8e1f9

测试效果图.jpg

二、Builder设计模式的介绍:

概念:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

三、标题栏打造分析

标题栏一般包括:

一、布局(getBarLayoutId):左边返回按钮、中间标题、右边文字或者标题。

二、构建:apply()

四、定义标题的抽象接口

/**

* 标题的抽象接口

*/

public interface IBar {

/**

* 应用

*/

void apply();

/**

* 标题的布局ID

*/

int getBarLayoutId();

}

五、定义一个APP标题构建的抽象基类BaseBarBuild

/**

* APP标题构建的抽象基类

*/

public abstract class BaseBarBuild {

/**

* 标题添加到的父布局

*/

protected ViewGroup mParent;

/**

* Activity

*/

public Activity mActivity;

public BaseBarBuild(Activity activity) {

this(activity, null);

}

public BaseBarBuild(Activity activity, ViewGroup parent) {

mParent = parent;

mActivity = activity;

}

/**

* 标题

*/

protected abstract B getTitleBar();

/**

* 构建标题

*/

public B build() {

B titleBar = getTitleBar();

if (titleBar != null) {

titleBar.apply();

}

return titleBar;

}

}

六、定义一个APP标题抽象基类BaseTitleBar

/**

* APP标题抽象基类

*/

public abstract class BaseTitleBar implements IBar {

/**

* 标题加载的View

*/

private View mTitleBar;

/**

* 构建器

*/

protected B build;

public BaseTitleBar(B build) {

this.build = build;

}

@Override

public abstract int getBarLayoutId();

@Override

public void apply() {

// 标题添加到哪个父布局

ViewGroup parent = build.mParent;

if (parent == null && build.mActivity != null) {

// 如果用户不写,默认添加到根布局DecorView的第一个位置

ViewGroup decorView = (ViewGroup) build.mActivity.getWindow().getDecorView();

parent = (ViewGroup) decorView.getChildAt(0);

}

if (parent == null) {

return;

}

// 加载标题栏的布局

mTitleBar = LayoutInflater.from(build.mActivity).inflate(getBarLayoutId(), parent, false);

// 添加到父布局

parent.addView(mTitleBar, 0);

applyParams(build);

}

/**

* 子类实现具体的构建参数

*/

protected abstract void applyParams(B build);

/**

* 查找标题栏里面的控件

*/

public T findViewById(int viewId) {

return (T) mTitleBar.findViewById(viewId);

}

}

七、剩下就是定义一个默认较为通用的标题和构建器。代码就不贴了。

八、使用

编写一个默认的标题和构建器,在setContentView后,

调用DefTitleBar bar=new DefBarBild(activity).build()即可构建一个标题栏了。

记得配上BaseActivity使用,还有一些细节在这里就不一一讲了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值