ToolBar的再使用

来源:互联网 发布:java 协议开发 编辑:程序博客网 时间:2024/06/05 11:16

上一篇介绍了ToolBar的最基本的用法,本篇我接着上一篇来说一下ToolBar的其他用法。如果不清楚基本用法的可以参照我的上一篇博文:
http://blog.csdn.net/james_shu/article/details/61661217

注意上次的代码都是在Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);之间进行设定的。
其中setSupportActionBar(toolbar);指定了我们的ToolBar会继承使用ActionBar的一些属性。
其中,当我们未设定标题的时候,ToolBar默认会显示APP的lable,而且显示在屏幕的左上角,类似的效果还有其他的几个,下面我首先介绍当不使用setSupportActionBar(toolbar);时,为了满足我们的业务需求,我们所需要进行的定制操作。
1.标题的设定:

        toolbar.setTitle("Title");//设置主标题        toolbar.setSubtitle("Subtitle");//设置子标题

同样的,我们也可以在布局文件中进行指定:

        app:subtitle="Title"        app:title="Subtitle"

注意,通过上面的方式设置的标题默认是在ToolBar标题栏的左上角,我们如果要将标题居中显示, 可以在xml自定义标题,此时的setTitle可以设置为空。ToolBar在不继承ActionBar的属性的时候,Title默认是消失的

   <android.support.v7.widget.Toolbar        android:id="@+id/toolbar"        android:layout_width="match_parent"        android:layout_height="?attr/actionBarSize"        android:background="@color/colorPrimary"        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"        >        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textColor="@color/colorAccent"            android:text="自定义标题"            android:textSize="16sp"            android:layout_gravity="center"            />    </android.support.v7.widget.Toolbar>

实现的效果:
这里写图片描述
2.菜单的设定:
当我们使用ActionBar时,经常在标题栏的右上角显示我们的菜单,而在我们的ToolBar中设定也很简单:

        toolbar.inflateMenu(R.menu.main);        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {            @Override            public boolean onMenuItemClick(MenuItem item) {                switch (item.getItemId()){                    case R.id.item_tips:                        Toast.makeText(getApplicationContext(),"提示",Toast.LENGTH_SHORT).show();                        break;                    case R.id.item_menu:                        Toast.makeText(getApplicationContext(),"菜单",Toast.LENGTH_SHORT).show();                        break;                    case R.id.item_shop:                        Toast.makeText(getApplicationContext(),"购物",Toast.LENGTH_SHORT).show();                        break;                }                return true;            }        });

注意,当时用了setSupportActionBar(toolbar);时,上面的设定会失效,下文会有说明。
当然目前的设定可定制性仍然还没有完全体现出来。默认的Menu都会显示在右边,如果我们要将我们的菜单也能在左边显示呢?support-v7包为我们提供了ActionMenuView这个控件来完成定制功能。
首先在xml中定义:

  <android.support.v7.widget.Toolbar        android:id="@+id/toolbar"        android:layout_width="match_parent"        android:layout_height="?attr/actionBarSize"        android:background="@color/colorPrimary"        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"        app:contentInsetLeft="0dp"        app:contentInsetStart="0dp"        >        <android.support.v7.widget.ActionMenuView            android:id="@+id/action_menu_view"            android:layout_width="wrap_content"            android:layout_height="match_parent" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textColor="@color/colorAccent"            android:text="自定义标题"            android:textSize="16sp"            android:layout_gravity="center"            />    </android.support.v7.widget.Toolbar>

将ActionMenuView放在ToolBar的第一个子View的位置,就能将菜单在左边显示。同时为了去掉左边默认带的边距我们需要指定两个属性:

        app:contentInsetLeft="0dp"        app:contentInsetStart="0dp"

然后我们可以在代码中设定:

        ActionMenuView actionMenuView= (ActionMenuView) findViewById(R.id.action_menu_view);        getMenuInflater().inflate(R.menu.main,actionMenuView.getMenu());        actionMenuView.setOnMenuItemClickListener(new ActionMenuView.OnMenuItemClickListener() {            @Override            public boolean onMenuItemClick(MenuItem item) {                switch (item.getItemId()){                    case R.id.item_tips:                        Toast.makeText(getApplicationContext(),"提示",Toast.LENGTH_SHORT).show();                        break;                    case R.id.item_menu:                        Toast.makeText(getApplicationContext(),"菜单",Toast.LENGTH_SHORT).show();                        break;                    case R.id.item_shop:                        Toast.makeText(getApplicationContext(),"购物",Toast.LENGTH_SHORT).show();                        break;                }                return true;            }        });

目前实现的效果如下:
这里写图片描述
当然,ToolBar中的菜单选项可以设定加载布局文件:

    <item        android:id="@+id/item_menu"        android:title="菜单"        app:actionLayout="@layout/action_menu"        app:showAsAction="ifRoom" />

或者在代码中设定:

        MenuItem menuItem=actionMenuView.getMenu().findItem(R.id.item_menu);        menuItem.setActionView(R.layout.action_menu);

监听事件的设定:

 menuItem.getActionView().setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {            }        });

ToolBar是MD规范中的控件,当然Google官方也为我们指定了设置ToolBar上按钮属性的方式:

      <!--指定按钮文字的颜色-->        <item name="android:actionMenuTextColor">#0000FF</item>        <!--指定按钮文字的样式-->        <item name="android:actionMenuTextAppearance">@style/ActionMenuTextAppearance</item>        <!--指定按钮的风格-->        <item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
    <style name="ActionMenuTextAppearance" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Menu">        <item name="android:textSize">18sp</item>        <item name="android:textStyle">bold</item>    </style>    <style name="ActionButtonStyle" parent="Widget.AppCompat.Light.ActionButton">        <item name="android:minWidth">44dp</item>        <item name="android:paddingLeft">16dp</item>        <item name="android:paddingRight">16dp</item>        <item name="android:paddingBottom">16dp</item>        <item name="android:paddingTop">16dp</item>    </style>

3.导航图标的设定:

        toolbar.setNavigationIcon(R.drawable.ic_menu_slideshow);        toolbar.setNavigationOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Toast.makeText(getApplicationContext(),"导航栏按钮",Toast.LENGTH_LONG).show();            }        });

下面介绍当使用setSupportActionBar(toolbar);时,由于我们会继承ActionBar自带的一些属性,所以此时我们的可定制性不是那么高,但是会更加方便快捷
1.标题的设定:
如果我们在代码中使用了ToolBar的setTitle的函数,那么新设定的值会覆盖原来的Label效果。当然在xml中的定制也是一样的。
2.菜单的设定:
如果我们使用setSupportActionBar(toolbar);,我们无法使用上面的方式设定菜单而应该使用传统的方式:

  @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main,menu);        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()){            case R.id.item_tips:                                 Toast.makeText(getApplicationContext(),"提示",Toast.LENGTH_SHORT).show();                break;            case R.id.item_menu:                Toast.makeText(getApplicationContext(),"菜单",Toast.LENGTH_SHORT).show();                break;            case R.id.item_shop:                Toast.makeText(getApplicationContext(),"购物",Toast.LENGTH_SHORT).show();                break;        }        return true;    }

3.导航栏的设置:

        ActionBar actionBar = getSupportActionBar();        if (actionBar != null) {            actionBar.setDisplayHomeAsUpEnabled(true);            actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);        }

Ok,我能想到的ToolBar的使用方式就这些,如果你有更好的使用方式,请给我留言,谢谢。 转载地址:http://blog.csdn.net/james_shu/article/details/61915367

原创粉丝点击