美文网首页
BaseActivity还能做些什么

BaseActivity还能做些什么

作者: 王小贱_ww | 来源:发表于2017-06-30 17:22 被阅读39次

关于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

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    style="@style/ToolBarStyle">


    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:ellipsize="end"
        android:singleLine="true"
        android:textColor="@color/white"
        android:textSize="20sp" />

</android.support.v7.widget.Toolbar>

style 有几个需要注意的点

<style name="ToolBarStyle">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">?attr/actionBarSize</item>
        <item name="android:background">?attr/colorPrimary</item>
        <item name="android:windowBackground">@color/white</item>
        <item name="android:theme">@style/windowStyle</item>
    关于style的配置项目来进行配置
    </style>
             <!--  app主题设置成NoActionBar需要注意 -->
        <style name="windowStyle" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
        <!--  Menu弹框背景颜色 -->
        <item name="android:colorBackground">@color/grey</item>
        <!--  Menu菜单按钮和item里面文字的颜色 -->
        <item name="android:textColorPrimary">@color/white</item>
        <!-- 是否覆盖锚点,默认为true,即盖住Toolbar -->
        <item name="overlapAnchor">false</item>

    </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还能做些什么

    关于Toolbar的使用网上有很多教程,使用中每个Activity都要至少加上这两行代码 这还是次要的,万一那一场...

  • Android Activity基类的抽取AppActivity

    一、上篇文章有写BaseActivity,为什么还要来一个AppAcitvity? 二、AppActivity还能...

  • 当懒惰乘风,扫过心头,我还能做些什么

  • 你还能做些什么?

    上图里的人物大家都熟悉吧,“功夫巨星李小龙”,这是我看到这个海报的第一反应,至于旁边所写的其他角色,我是知...

  • 我还能做些什么

    看到这张图片,我的心一阵颤抖,我的重心不是自己的年龄,而是父母。中国人口平均寿命,虽然是2015年的统计,但也...

  • 我还能做些什么

    每一天 每一刻 每一分 每一秒 我希望我都是最好的存在 即便你看到眼前的我 一片狼籍 但是都笑了 忍不住的那种 有...

  • 我还能做些什么

    叶子冬/文 无数次想要离开这个工作,算得上是逃避。 一次次觉得自己病了,精神上几度游离在崩溃边缘,焦虑,慌乱,心软...

  • 我还能做些什么

    我开始整夜整夜的睡不着。 我不知道我以前做了些什么,我也不知道我还能做些什么,似乎不管我做什么,状况还在进一步恶化...

  • 有什么条件做什么事,认认真真过好每一天。

    失业的时候经常问自已“每天我该怎么过?我还能选择什么?我还能做些什么?没工作日子怎么过?没工作还能靠什么生活?...

  • Android Activity基类的抽取BaseActivit

    一、为什么要抽取BaseActivity 二、由于代码BaseActivity较为简单,直接上代码 了解更多实际开...

网友评论

      本文标题:BaseActivity还能做些什么

      本文链接:https://www.haomeiwen.com/subject/bclicxtx.html