Action bar 允许我们为当前环境下最重要的操作添加按钮。那些直接出现在 action bar 中的 icon 和/或文本被称作action buttons(操作按钮)。安排不下的或不足够重要的操作被隐藏在 action overflow 中。
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="@dimen/layout_height_44" android:background="@color/background_yellow" android:contentInsetLeft="0dp" android:contentInsetStart="0dp" android:theme="@style/ToolbarTheme" android:minHeight="?attr/actionBarSize" android:padding="0dp" app:navigationIcon="@mipmap/left_back" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:titleTextAppearance="@style/Toolbar.TitleText"> <TextView android:id="@+id/toolbar_title" style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textSize="@dimen/text_size_15" android:textColor="@color/textcolor_black"/> <TextView android:id="@+id/toolbar_menu_title" style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:paddingRight="15dp" android:textSize="@dimen/text_size_15"/> </android.support.v7.widget.Toolbar> |
在 XML 中指定操作
所有的操作按钮和 action overflow 中其他可用的条目都被定义在 menu资源 的 XML 文件中。通过在项目的 res/menu
目录中新增一个 XML 文件来为 action bar 添加操作。
为想要添加到 action bar 中的每个条目添加一个 <item>
元素。例如:
res/menu/main_activity_actions.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/toolbar_action1" android:icon="@mipmap/screen" android:title="Action" app:showAsAction="always"/> <item android:id="@+id/toolbar_action2" android:icon="@mipmap/add_right" android:title="Action" app:showAsAction="always"/> </menu> |
icon 属性要求每张图片提供一个 resource ID
。在 @drawable/
之后的名字必须是存储在项目目录 res/drawable/
下位图图片的文件名。例如:ic_action_search.png
对应 "@drawable/ic_action_search"。同样地,title 属性使用通过 XML 文件定义在项目目录 res/values/
中的一个 string 资源
为 Action Bar 添加操作
要为 action bar 布局菜单条目,就要在 activity 中实现 onCreateOptionsMenu() 回调方法来 inflate
菜单资源从而获取 Menu 对象。例如:
@Override public boolean onCreateOptionsMenu(Menu menu) { // 为ActionBar扩展菜单项 MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); } |
为操作按钮添加响应事件
当用户按下某一个操作按钮或者 action overflow 中的其他条目,系统将调用 activity 中onOptionsItemSelected()的回调方法。在该方法的实现里面调用MenuItem的getItemId()来判断哪个条目被按下 - 返回的 ID 会匹配我们声明对应的 <item>
元素中 android:id
属性的值。
@Override public boolean onOptionsItemSelected(MenuItem item) { int i = item.getItemId(); if (i == R.id.toolbar_action1) { mDrawerLayout.openDrawer(llDrawerContent); return true; } else if (i == R.id.toolbar_action2) {// do something View img = this.findViewById(R.id.toolbar_action2); topRightDialog(img); return true; } else { return super.onOptionsItemSelected(item); } } |
为下级 Activity 添加向上按钮
在不是程序入口的其他所有屏中(activity 不位于主屏时),需要在 action bar 中为用户提供一个导航到逻辑父屏的up button(向上按钮)。
通过调用setDisplayHomeAsUpEnabled() 来把 app icon 设置成可用的向上按钮:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_displaymessage); // 如果你的minSdkVersion属性是11或更高: getSupportActionBar().setDisplayHomeAsUpEnabled(true); } |