您的位置:首页 > 其它

自定义ActionBar,在BaseActivity如何降低耦合

2016-08-18 10:06 253 查看
         在工作中,ActionBar使用非常频繁,虽然系统的ActionBar、ToolBar给我们提供了很棒的UI体验。但是,我们平常的项目中并不需要这么酷炫的ActionBar。通常来说,一个ActionBar包括 

         左边图片, 左边文字, 标题 ,右边文字,右边图标。

         以上5点,基本满足了80%的ActionBar需求。

        一般我们将实现的过程写在BaseActivity中,但有几个不方便的点:

      1、子类中不方便修改,除非声明全局变量,但这会给代码带来严重的碎片化,致使不好管理;

              2、如果不声明全局变量,则需要重新findViewById一次,才能对ActionBar重新操作,使得代码可读性、维护性太差;

       那有什么办法可以兼容这两种情况呢?

        有,那就是,声明一个整体的全局变量:ActionViewHolder。

        

ActionHolder代码:

       

/**
* Created by yanjunhui
* on 2016/8/17.
* email:303767416@qq.com
*/
public class ActionHolder {
View layLeft;
View layRight;
public TextView tvTitle;
public TextView tvLeft;
public TextView tvRight;
public View iconLeft;
public View iconRight;
}


     BaseActivity代码:

/**
* Created by yanjunhui
* on 2016/8/15.
* email:303767416@qq.com
*/
public abstract class BaseActivity extends AppCompatActivity {

private ActionHolder actionHolder;

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
MyApplication.getInstance().addActivity(this);
}

@Override
protected void onDestroy() {
super.onDestroy();
}

/**
* 构建自己的ActionBar
*/
protected void buildActionBar(String strTitle, int resIdLeft, String strLeft, int resIdRight, String strRight, final ActionBarClickListener listener) {
actionHolder = new ActionHolder();
actionHolder.tvTitle = (TextView) findViewById(R.id.tv_actionbar_title);
actionHolder.tvLeft = (TextView) findViewById(R.id.tv_actionbar_left);
actionHolder.tvRight = (TextView) findViewById(R.id.tv_actionbar_right);
actionHolder.iconLeft = findViewById(R.id.v_actionbar_left);
actionHolder.iconRight = findViewById(R.id.v_actionbar_right);

if (!TextUtils.isEmpty(strTitle)) {
actionHolder.tvTitle.setText(strTitle);
}
if (!TextUtils.isEmpty(strLeft)) {
actionHolder.tvLeft.setText(strLeft);
actionHolder.tvLeft.setVisibility(View.VISIBLE);
} else {
actionHolder.tvLeft.setVisibility(View.GONE);
}
if (!TextUtils.isEmpty(strRight)) {
actionHolder.tvRight.setText(strRight);
actionHolder.tvRight.setVisibility(View.VISIBLE);
} else {
actionHolder.tvRight.setVisibility(View.GONE);
}

if (resIdLeft == 0) {
actionHolder.iconLeft.setVisibility(View.GONE);
} else {
actionHolder.iconLeft.setBackgroundResource(resIdLeft);
actionHolder.iconLeft.setVisibility(View.VISIBLE);
}

if (resIdRight == 0) {
actionHolder.iconRight.setVisibility(View.GONE);
} else {
actionHolder.iconRight.setBackgroundResource(resIdRight);
actionHolder.iconRight.setVisibility(View.VISIBLE);
}

if (listener != null) {
actionHolder.layLeft = findViewById(R.id.lay_actionbar_left);
actionHolder.layRight = findViewById(R.id.lay_actionbar_right);
actionHolder.layLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onLeftClick();
}
});
actionHolder.layRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onRightClick();
}
});
}
}

/**
* 获得自己的ActionBar
*
* @return
*/
public ActionHolder getActionHolder() {
return actionHolder;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: