美文网首页
ToolBar的使用

ToolBar的使用

作者: EdisonJQ | 来源:发表于2016-08-21 12:02 被阅读152次

项目中要使用到ToolBar,所以把用到的知识总结一下:
1.首先要在styles.xml中设置noActionBar

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">    
<!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.Base" parent="Theme.AppCompat">    
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item
</style>

2.在布局中添加v7包下的ToolBar,通常做法是额外写一个布局,利用include:layout的方法添加到自己的布局中,因为ToolBar会在一个项目中多次用到:

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/id_toolBar"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:fitsSystemWindows="true">
</android.support.v7.widget.Toolbar>

其中android:fitsSystemWindows="true"作用是避免ToolBar和系统状态栏发生重合。

3.在Activity中的引用与设置相关属性
a.先加载menu布局

/** * 为toolBar设置menu
* @param menu
* @return
*/@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.toolbar_item,menu);
    return super.onCreateOptionsMenu(menu);
}

b.在代码中初始化ToolBar

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

其中setSupportActionBar(toolbar);这句代码就是用ToolBar代替ActionBar

c.为ToolBar的menu item设置点击事件

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener()
{    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.toolbar_add:
                break;
        }
    return false;
    }
});

其中case 中的id为menu.xml中设置的id

3.到这里一个基本的ToolBar就已经加载到app中了,当然还有一些比较常用的属性来美化ToolBar:(注意,前提是已经写了setSupportActionBar(toolbar);这句代码,不然会无效果)。

toolbar.setTitle("主标题");//设置主标题
toolbar.setSubtitle("副标题");//设置副标题
toolbar.setLogo(R.drawable.ic_launcher);//设置LOGO

4.为ToolBar主标题左边添加一个icon,并添加点击事件

toolbar.setNavigationIcon(R.drawable.click_menu);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

5.当然还有一个最重要的知识点我觉得就是可以动态改变menu的item,下面上代码:

/** * 重写该方法在不同页面可以刷新不同的menu_item
* 要手动调用invalidateOptionsMenu()方法去刷新
* @param menu
* @return
*/@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    switch (type){
        case Contraint.DISTRIBUTOR_TYPE:
        menu.findItem(R.id.toolbar_add).setVisible(true);
    break;
        case Contraint.ANIMAL_TOTAL_TYPE:
        menu.findItem(R.id.toolbar_add).setVisible(true);
    break;
        case Contraint.QUALITY_STATICS_TOTAL_TYPE:
        menu.findItem(R.id.toolbar_add).setVisible(true);
    break;
        case Contraint.DEAD_STATICS_TOTAL_TYPE:
        menu.findItem(R.id.toolbar_add).setVisible(false);
    break;
    }
    return super.onPrepareOptionsMenu(menu);
}

当然,这里只是重写了各种情况下item的显示状态,还要在自己更改各种情况的时候手动调用invalidateOptionsMenu()去刷新menu item的显示。

相关文章

网友评论

      本文标题:ToolBar的使用

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