BaseActivity还能做些什么

关于Toolbar的使用网上有很多教程,使用中每个Activity都要至少加上这两行代码

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

这还是次要的,万一那一场产品经理让你修改一下Toolbar,咋办,不改!!!(貌似不行),改吧(好多Activity,猴年马月),针对以上情况有必要统一写一下Toolbar,方便管理和使用。

BaseActivity代码

public abstract class BaseActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener {
    protected Toolbar toolbar;
    protected TextView toolbar_title;
    //针对不同的情况,有些界面可能用不到back
    public static final int MODE_BACK = 0;  //需要带返回键
    public static final int MODE_DRAWER = 1; //带侧拉抽屉
    public static final int MODE_NONE = 2;//不用Toolbar  
    public static final int MODE_HOME = 3;//主页面


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setUpContentView();//绑定布局
        setUpView();//绑定view
        setUpData(savedInstanceState);//赋值
    }

    @Override
    public void setContentView(@LayoutRes int layoutResID) {
        setContentView(layoutResID, -1, -1, MODE_BACK);
    }

    //这里用到方法的重载,针对不同情况进行处理
    public void setContentView(int layoutResID, int titleResId) {
        setContentView(layoutResID, titleResId, -1, MODE_BACK);
    }

  public void setContentView(int layoutResID, int titleResId, int mode) {
        setContentView(layoutResID, titleResId, -1, MODE_BACK);
    }

    public void setContentView(int layoutResID, int titleResId, int menuId, int mode) {
        super.setContentView(layoutResID);
        setUpToolbar(titleResId, menuId, mode);

    }

    private void setUpToolbar(int titleResId, int menuId, int mode) {
        if (mode != MODE_NONE) {  //判读需不需要toolbar
            toolbar = (Toolbar) findViewById(R.id.toolbar);
            toolbar.setTitle("");
            toolbar_title = (TextView) findViewById(R.id.toolbar_title);
            if (mode == MODE_BACK) {  //需要返回键  设置图片样式
                toolbar.setNavigationIcon(R.mipmap.nav_backarrow);
            }
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onNavigationOnClicked();  //为什么这里不直接写finis(); ---往下走
                }
            });
            //toolbar_title 赋值
            setUpTitle(titleResId);
            //menu赋值
            setUpMenu(menuId);


        }


    }

    protected void setUpMenu(int menuId) {
        if (toolbar != null) {
            toolbar.getMenu().clear();
            if (menuId > 0) {
                toolbar.inflateMenu(menuId);
                toolbar.setOnMenuItemClickListener(this);
            }
        }

    }

    protected void setUpTitle(int titleResId) {
        if (titleResId > 0 && toolbar_title != null) {
            toolbar_title.setText(titleResId);
        }
    }
//  protected  只有子类可以重写这个方法 ,万一点击返回键不是finishi()呢,子类重写这个方法即可
    protected void onNavigationOnClicked() {
        finish();
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        return false;
    }

    protected abstract void setUpContentView();

    protected abstract void setUpView();

    protected abstract void setUpData(Bundle savedInstanceState);
}

widget_toolbar.xml




    


style 有几个需要注意的点


             
        

Activity

  3种布局3行代码(敢说不简单???)
   setContentView(R.layout.activity_test1, R.string.test1);//带Back不带menu
    setContentView(R.layout.activity_test1, R.string.test1,R.menu.search);//带back 带menu
   setContentView(R.layout.activity_test1, R.string.test1,MODE_HOME);//只有textview(主界面)

你可能感兴趣的:(BaseActivity还能做些什么)