Design

Toolbar中添加菜单

2016-07-16  本文已影响3650人  vergo

回顾

我的《Toolbar使用》这篇文章中写过,Toolbar有两种使用方式

所以在Toolbar中添加菜单也有两种方式。

添加菜单

新建菜单资源

在res下新建menu文件夹用来存放菜单资源xml。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/toolbar_search"
        android:icon="@mipmap/ic_search"
        android:title="搜索"
        android:orderInCategory="0"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom|collapseActionView" />

    <item
        android:id="@+id/toolbar_collection"
        android:icon="@mipmap/ic_launcher"
        android:orderInCategory="1"
        android:title="收藏"
        app:showAsAction="never" />
    <item
        android:id="@+id/toolbar_share"
        android:orderInCategory="2"
        android:title="分享"
        app:showAsAction="never" />
    <item
        android:id="@+id/toolbar_fontsize"
        android:orderInCategory="3"
        android:title="字号"
        app:showAsAction="never" />
</menu>

Activity中添加

Toolbar作为ActionBar使用

重写Activity的onCreateOptionsMenu方法并实现相关逻辑

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

监听菜单项的事件重写Activity的onOptionsItemSelected方法

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.toolbar_collection:
            Toast.makeText(this, "收藏", Toast.LENGTH_SHORT).show();
            break;
        case R.id.toolbar_share:
            Toast.makeText(this, "分享", Toast.LENGTH_SHORT).show();
            break;
        case R.id.toolbar_fontsize:
            Toast.makeText(this, "字号", Toast.LENGTH_SHORT).show();
            break;
        case R.id.toolbar_model:
            Toast.makeText(this, "模式", Toast.LENGTH_SHORT).show();
            break;
    }
    return super.onOptionsItemSelected(item);
}
Toolbar作为独立控件使用
toolbar.inflateMenu(R.menu.menu_main);

监听菜单项的事件则通过setOnMenuItemClickListener设置

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.toolbar_collection:
                Toast.makeText(MainActivity.this, "收藏", Toast.LENGTH_SHORT).show();
                break;
            case R.id.toolbar_share:
                Toast.makeText(MainActivity.this, "分享", Toast.LENGTH_SHORT).show();
                break;
            case R.id.toolbar_fontsize:
                Toast.makeText(MainActivity.this, "字号", Toast.LENGTH_SHORT).show();
                break;
            case R.id.toolbar_model:
                Toast.makeText(MainActivity.this, "模式", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
});
效果
菜单效果

弹出菜单样式调整

上面效果图会发现弹出的菜单是深灰色的背景,可能与当前页面风格不搭,Toolbar提供了setPopupTheme方法和对应的popupTheme属性来设置弹出菜单样式。

定义style样式资源
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" >
    <item name="android:textColor">@color/colorPrimary</item>
</style>

该样式继承于ThemeOverlay.AppCompat.Light,我修改了文本色属性。

布局中设置

这里通过popupTheme属性来修改样式

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.Toolbar
        android:id="@+id/main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>
</RelativeLayout>

要注意的是popupTheme并非Android本身SDK中的属性,而是来自于支持包,所以添加命名空间

xmlns:app="http://schemas.android.com/apk/res-auto"
效果
样式调整效果

总结

关于Toolbar的使用以及样式调整就暂时整理到这,还有很多细节方面还得在实际运用中去积累。
最后贴张总的效果图

Toolbar
上一篇下一篇

猜你喜欢

热点阅读