参考:
http://www.jianshu.com/p/570d8bddb5c0
http://www.jianshu.com/p/87288925ee1f
定义导航条规范
public interface INavigation {
// 绑定布局ID
public int bindLayoutId();
// 给View设置参数
public void applyView();
}
构建AbsNavigationBar
public abstract class AbsNavigationBar<P extends AbsNavigationBar.Builder.NavigationParams> implements INavigation {
private P params;
private View view;
public AbsNavigationBar(P params) {
this.params = params;
createAndBind();
}
protected String getString(int id) {
return this.params.context.getResources().getString(id);
}
protected int getColor(int id) {
return ContextCompat.getColor(this.params.context, id);
}
protected P getParams() {
return params;
}
/**
* 设置文本
* @param viewId
* @param text
*/
protected void setText(int viewId, CharSequence text) {
TextView tv = findViewById(viewId);
if (tv != null) {
tv.setText(text);
}
}
/**
* 设置点击事件
* @param viewId
* @param listener
*/
protected void setOnClickListener(int viewId, View.OnClickListener listener) {
View view = findViewById(viewId);
if (view != null) {
view.setOnClickListener(listener);
}
}
/**
* 设置背景资源
* @param viewId
* @param resourceId
*/
protected void setImageResource(int viewId, int resourceId) {
ImageView imageView = findViewById(viewId);
if (imageView != null) {
imageView.setImageResource(resourceId);
}
}
protected <T extends View> T findViewById(int id) {
return (T) view.findViewById(id);
}
/**
* 创建和绑定布局
*/
public void createAndBind() {
if (params == null) {
return;
}
view = LayoutInflater.from(params.context).inflate(bindLayoutId(), params.parent, false);
params.parent.addView(view, 0);
applyView();
}
// 构建导航条类 这个类只是定义默认的配置 具体功能的实现一定由具体的实现类决定
public abstract static class Builder {
// 构建导航条方法
public abstract AbsNavigation create();
// 默认的配置参数
public static class NavigationParams {
public Context context;
public ViewGroup parent;
public NavigationParams(Context context, ViewGroup parent) {
this.context = context;
this.parent = parent;
}
}
}
}
构建DefaultNavigationBar
public class DefaultNavigation<D extends AbsNavigation.Builder.NavigationParams> extends
AbsNavigation<DefaultNavigation.Builder.DefaultNavigationParams> {
public DefaultNavigation(Builder.DefaultNavigationParams params) {
super(params);
}
@Override
public void applyView() {
// 给我们的导航条绑定资源
setImageResource(R.id.iv_left, getParams().leftIconRes);
setImageResource(R.id.iv_right, getParams().rightIconRes);
setImageResource(R.id.iv_right_icon, getParams().textRightIconRes);
setText(R.id.title_tv, getParams().title);
setText(R.id.left_tv, getParams().leftTv);
setText(R.id.right_tv, getParams().rightTv);
setBackgroundColor(R.id.title_bar, getParams().bgColor);
setOnClickListener(R.id.left_ll, getParams().leftOnClickListener);
setOnClickListener(R.id.right_ll, getParams().rightOnClickListener);
}
@Override
public int bindLayoutId() {
// 绑定布局layoutId
return R.layout.navigation_default;
}
// 构建导航条类
public static class Builder extends AbsNavigation.Builder {
private DefaultNavigationParams params;
public Builder(Context context, ViewGroup parent) {
params = new DefaultNavigationParams(context, parent);
}
public Builder setTitle(String title) {
params.title = title;
return this;
}
public Builder setRight(String right) {
params.rightTv = right;
return this;
}
public Builder setLeft(String left) {
params.leftTv = left;
return this;
}
public Builder setLeftIcon(int iconRes) {
params.leftIconRes = iconRes;
return this;
}
public Builder setRightIcon(int iconRes) {
params.rightIconRes = iconRes;
return this;
}
public Builder setTitleBackgroundColor(int bgColor) {
params.bgColor = bgColor;
return this;
}
public Builder setLeftOnClickListener(View.OnClickListener onClickListener) {
params.leftOnClickListener = onClickListener;
return this;
}
public Builder setRightOnClickListener(View.OnClickListener onClickListener) {
params.rightOnClickListener = onClickListener;
return this;
}
@Override
public DefaultNavigation<NavigationParams> create() {
DefaultNavigation<NavigationParams> navigation = new DefaultNavigation<NavigationParams>(params);
return navigation;
}
// 默认的配置参数
public static class DefaultNavigationParams extends NavigationParams {
//标题
public String title;
//左边图片资源
public int leftIconRes;
//右边图片资源
public int rightIconRes;
//左边的点击事件
public View.OnClickListener leftOnClickListener;
//右边的点击事件
public View.OnClickListener rightOnClickListener;
public String leftTv;
public String rightTv;
public int bgColor;
public DefaultNavigationParams(Context context, ViewGroup parent) {
super(context, parent);
}
}
}
}
使用
DefaultNavigationBar navigationBar = new DefaultNavigation.Builder(this,
(ViewGroup) findViewById(android.R.id.content))
.setLeftIcon(R.drawable.common_back).setTitle("投稿").setRightText("发表").create();