自定义ActionBar,在BaseActivity如何降低耦合
来源:互联网 发布:Ubuntu 安装 login 编辑:程序博客网 时间:2024/05/17 04:26
在工作中,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; }
0 0
- 自定义ActionBar,在BaseActivity如何降低耦合
- 如何降低代码的耦合
- 如何降低类之间的耦合
- 如何降低一个程序的耦合性
- 如何降低一个程序的耦合性
- 降低耦合。。。
- 降低耦合
- 降低耦合
- 降低耦合
- 如何降低平台和业务的数据结构的耦合
- spring的依赖注入如何降低了耦合
- boost::any在降低模块之间耦合性的应用
- 自定义BaseActivity
- 自定义BaseActivity
- 自定义BaseActivity
- 自定义BaseActivity
- 如何自定义ActionBar显示标题在中间位置
- 如何自定义ActionBar显示标题在中间位置 可用
- iOS 数据库比较:SQLite vs. Core Data vs. Realm
- 12864液晶显示实验
- java HashSet HashMap(源码分析)
- 安装Fedora要做的25件事情
- Storm入门教程
- 自定义ActionBar,在BaseActivity如何降低耦合
- 思科与Fortinet证实:NSA黑客曝光安全漏洞属实
- I2C总线及AT24C02读写实验报告
- Android中GridView实现标签只选能一个功能
- Zend Studio集成Apigility之添加和测试认证(2/2)
- 游戏外挂基本原理及实现
- HDU-2896 病毒侵袭 && HDU-3065 病毒侵袭持续中(AC自动机)
- STL中的vector与list插入数据速度比较
- PhpStorm配置xdebug