INavigation接口
public interface INavigation {
/**
* 设置布局
*/
void createNavigationBar();
/**
* 添加到头部
*/
void attachParent(View navigationBar, ViewGroup parent);
/**
* 添加参数
*/
void attachNavigationParams();
}
基本的NavigationBar
public class AbsNavigationBar<T extends AbsNavigationBar.Builder> implements INavigation {
private T mBuilder;
private View mNavigationBar;
protected AbsNavigationBar(T builder) {
this.mBuilder = builder;
createNavigationBar();
}
public T getBuilder() {
return (T) mBuilder;
}
@Override
public void createNavigationBar() {
//设置布局
mNavigationBar = LayoutInflater.from(mBuilder.mContext)
.inflate(mBuilder.mLayoutId, mBuilder.mParent, false);
//添加
attachParent(mNavigationBar, mBuilder.mParent);
// 绑定参数
attachNavigationParams();
}
@Override
public void attachParent(View navigationBar, ViewGroup parent) {
parent.addView(navigationBar, 0);
}
//放置参数
@Override
public void attachNavigationParams() {
//设置文本
HashMap<Integer, CharSequence> textMaps = mBuilder.mTextMaps;
for (Map.Entry<Integer, CharSequence> entry : textMaps.entrySet()) {
TextView textView = findViewById(entry.getKey());
textView.setText(entry.getValue());
}
//设置点击事件
HashMap<Integer, View.OnClickListener> clickListenerMaps = mBuilder.mClickListeners;
for (Map.Entry<Integer, View.OnClickListener> entry : clickListenerMaps.entrySet()) {
View view = findViewById(entry.getKey());
view.setOnClickListener(entry.getValue());
}
}
public <T extends View> T findViewById(int viewId) {
return mNavigationBar.findViewById(viewId);
}
public abstract static class Builder<T extends Builder> {
public Context mContext;
public int mLayoutId;
public ViewGroup mParent;
public HashMap<Integer, CharSequence> mTextMaps;
public HashMap<Integer, View.OnClickListener> mClickListeners;
public Builder(Context context, int layoutId, ViewGroup parent) {
this.mContext = context;
this.mLayoutId = layoutId;
this.mParent = parent;
mClickListeners = new HashMap<>();
mTextMaps = new HashMap<>();
}
public abstract AbsNavigationBar create();
public T setText(int viewId, String text) {
mTextMaps.put(viewId, text);
return (T) this;
}
public T setOnClickListener(int viewId, View.OnClickListener listener) {
mClickListeners.put(viewId, listener);
return (T) this;
}
}
}
默认的NaviationBar,默认知道了布局
public class DefaultNavigationBar extends AbsNavigationBar<DefaultNavigationBar.Builder>{
protected DefaultNavigationBar(Builder builder) {
super(builder);
}
@Override
public void attachNavigationParams() {
super.attachNavigationParams();
TextView textView=findViewById(R.id.back_tv);
textView.setVisibility(getBuilder().mLeftVisible);
}
public static class Builder extends AbsNavigationBar.Builder<DefaultNavigationBar.Builder>{
private int mLeftVisible=View.VISIBLE;
public Builder(Context context, ViewGroup parent) {
super(context, R.layout.ui_default_navigation_bar, parent);
}
@Override
public DefaultNavigationBar create() {
return new DefaultNavigationBar(this);
}
public Builder setLeftText(String text){
setText(R.id.back_tv,text);
return this;
}
public Builder setLeftClickListener(View.OnClickListener listener){
setOnClickListener(R.id.back_tv,listener);
return this;
}
public Builder hideLeftText(){
mLeftVisible=View.INVISIBLE;
return this;
}
}
}
给客户用的NavigationBar
public class NavigationBar extends AbsNavigationBar{
protected NavigationBar(Builder builder) {
super(builder);
}
public static class Builder extends AbsNavigationBar.Builder<NavigationBar.Builder>{
public Builder(Context context, int layoutId, ViewGroup parent) {
super(context, layoutId, parent);
}
@Override
public NavigationBar create() {
return new NavigationBar(this);
}
}
}
最后的使用
ViewGroup parent = (ViewGroup) findViewById(R.id.view_root);
DefaultNavigationBar navigationBar = new DefaultNavigationBar
.Builder(this,parent)
.setLeftText( "返回")
//.hideLeftText()
.setLeftClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
})
.create();
/* NavigationBar navigationBar=new NavigationBar
.Builder(this,R.layout.ui_navigation_bar,parent)
.setText(R.id.back_tv,"返回")
.setOnClickListener(R.id.back_tv, new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
}).create();*/
}