自定义actionbar
第一次写博客,写了一个自定义的custombarbar控件,
先上效果吧
主要是动态控制显示,可扩展性强
上代码........
/** * addLeftView 添加左边控件,按先后顺序排列 * addRightView 添加右边控件,按先后顺序排列 * addMiddleViewExist 添加中间控件,只允许同时存在一个 * * @author fmh */ public class CustomBarbar extends RelativeLayout { private ArrayList<ViewItem> views = new ArrayList<>(0); public CustomBarbar(Context context) { super(context); } public CustomBarbar(Context context, AttributeSet attrs) { super(context, attrs); } public CustomBarbar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public View addLeftView(View view) { return addCustomView(view, Model.LEFT); } public View addRightView(View view) { return addCustomView(view, Model.RIGHT); } public View addMiddleViewExist(View view) { return addCustomView(view, Model.MIDDLE); } private View addCustomView(View view, Model model) { LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int lastLeftId = -1; int rule = ALIGN_PARENT_LEFT; switch (model) { case LEFT: rule = ALIGN_PARENT_LEFT; break; case RIGHT: rule = ALIGN_PARENT_RIGHT; break; case MIDDLE: rule = CENTER_IN_PARENT; break; } for (ViewItem item : views) { if (item.model == model) { lastLeftId = item.view.getId(); } } //中间只允许放一个 if (model == Model.MIDDLE && lastLeftId != -1) { removeView(findViewById(lastLeftId)); lastLeftId = -1; } if (lastLeftId == -1) { lp.addRule(rule); } else { switch (model) { case LEFT: lp.leftMargin = 25; lp.addRule(RIGHT_OF, lastLeftId); break; case RIGHT: lp.rightMargin = 25; lp.addRule(LEFT_OF, lastLeftId); break; case MIDDLE: break; } } lp.addRule(CENTER_VERTICAL); addView(view, lp); views.add(new ViewItem(view, model)); view.setId(views.size()); return view; } /** * 获取textview * * @param text * @return */ public TextView getTextView(String text) { TextView textView = new TextView(getContext()); textView.setText(text); return textView; } /** * 获取ImageView * * @param resId * @return */ public ImageView getImageView(int resId) { ImageView imageView = new ImageView(getContext()); if (resId != NO_ID) { imageView.setImageResource(resId); } return imageView; } private class ViewItem { public View view; public Model model = Model.LEFT; public ViewItem(View view, Model model) { this.view = view; this.model = model; } } public enum Model { LEFT, MIDDLE, RIGHT } }
addLeftView(View)
addRightView(View)
addMiddleViewExist(View)
方法如其名,代码逻辑也很简单
简单粗暴,至于25就是2个控件间隙,直接写死了,不可取哈.....
github地址:https://github.com/ff525257/custombarbar
后续可能会更新,哈哈哈哈哈哈