应用栏允许开发者自定义按钮,方便置顶一些对于当前页面来讲重要的操作。例如,对于相册应用来讲,用户在滑动查看相册时,可以将分享和创建新相册的按钮放置在页面顶端,而在用户浏览私人照片时,顶端又可以放置剪切和过滤的按钮。

应用栏的空间是有限的。通过menu,应用栏可以放置很多操作。

添加按钮

1.创建menu文件:所有的按钮及操作都定义在XMLmenu resource中 。想要为ToolBar添加按钮,需要在工程中的res/menu/目录中创建一个新的xml文件。

为每一个你想要加入的按钮添加一个<item>节点。就像下面的示例一样:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- "Mark Favorite", should appear as action button if possible -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

app:showAsAction属性代表这个按钮是否显示在应用栏上。如果是设置app:showAsAction="ifRoom"并且有剩余空间,(就像示例代码中的喜欢按钮)这个操作就会在应用栏上显示一个按钮;如果没有剩余空间,按钮就会收缩到更多按钮中。如果是设置app:showAsAction="never"(就像示例代码中的设置按钮),按钮就会一直在更多按钮中,不会出现在应用栏上。

当按钮显示在应用栏上时,系统会使用默认的图标。你可以在Material Icons页面找到更多的应用栏图标。

2.在Activity中覆写onCreateOptionsMenu(Menu menu)方法,将创建好的menu文件初始化并绑定在当前Activity,返回true。例:

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

处理操作

当用户点击应用栏上的某一个按钮,系统会调用Activity的onOptionsItemSelected()方法回调,并且传递哪一个按钮被点击的MenuItem对象。所以,我们需要覆写这个方法,并且通过调用MenuItem.getItemId()来明确哪个按钮被点击了。这个ID值是和你在<item>节点中定义的android:id属性值相匹配的。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chose the "Settings" item, show the app settings UI...
            return true;

        case R.id.action_favorite:
            // User chose the "Favorite" action, mark the current item
            // as a favorite...
            return true;

        default:
            // If we got here, the user's action was not recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}

附录:

Action Buttons

Material Icons

results matching ""

    No results matching ""