通过应用栏,您可以添加用于用户操作的按钮。借助此功能,你可以 在应用顶部显示与当前上下文中最重要的操作。 例如,照片浏览应用可能会显示分享和创建 相册按钮。时间 当用户查看单张照片时,应用可能会显示剪裁按钮 过滤条件按钮。
应用栏中的空间有限。如果应用声明的操作数量超出限制 应用栏中,则应用栏会将多余的操作发送到“溢出”菜单。 应用还可以指定某项操作始终显示在溢出菜单中, 而不是在应用栏中显示
添加操作按钮
操作溢出菜单中提供的所有操作按钮和其他项均
在 XML 中定义
菜单资源。添加
操作栏,请在项目的
res/menu/
目录中。
将
<item>
元素,如
以下示例菜单 XML 文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- "Mark Favorite", must 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, must 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"
(如
示例代码的 settings 操作 - 该操作始终列在
溢出菜单,并且不会显示在应用栏中。
如果操作显示,系统会使用操作的图标作为操作按钮 。您可在以下位置找到许多有用的图标: Material 图标。
响应操作
当用户选择一个应用栏项时,系统会调用您的
活动
onOptionsItemSelected()
回调方法,并将
MenuItem
个对象
以指明点按的是哪项内容在您使用
onOptionsItemSelected()
,调用
MenuItem.getItemId()
方法确定点按的是哪个项目。返回的 ID 与您
在对应 <item>
元素的
android:id
属性。
例如,以下代码段会检查用户选择的是哪项操作。 如果该方法无法识别用户的操作,则会调用父类 方法:
Kotlin
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_settings -> { // User chooses the "Settings" item. Show the app settings UI. true } R.id.action_favorite -> { // User chooses the "Favorite" action. Mark the current item as a // favorite. true } else -> { // The user's action isn't recognized. // Invoke the superclass to handle it. super.onOptionsItemSelected(item) } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: // User chooses the "Settings" item. Show the app settings UI. return true; case R.id.action_favorite: // User chooses the "Favorite" action. Mark the current item as a // favorite. return true; default: // The user's action isn't recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } }