(一)开始____2、添加操作栏-Adding the Action Bar——添加操作按钮-Adding Action Buttons
目录[隐藏] |
添加操作按钮
- 操作栏允许你为当前环境中最重要的操作项目添加按钮。那些图标或者文字直接出现在操作栏中的被称为操作按钮。无法容纳在操作栏中或者不够重要的按钮都隐藏在操作溢出。

在XML中指定操作
- 所有的操作按钮和操作溢出里的其他可用项目是在XML菜单资源里定义的。为了在操作栏中添加操作,需要在项目的 res/menu/目录下创建新的XML文件。
- 为你需要的每个项目在操作栏添加 <item>元素。例如:
- res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" android:showAsAction="ifRoom" /> <!-- Settings, should always be in the overflow --> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:showAsAction="never" /> </menu>
- 这就声明当操作栏空间可用时,搜索操作会作为操作按钮来显示,但是搜索操作总会在溢流中出现(默认情况下,所有操作会在溢出中出现,但明确宣告对每个操作的设计意图会更好)。
- 图标属性需要图像的资源ID。@后面绘制的名称必须是已经保存在项目res/drawable/ 目录中的位图图像名称。例如"@drawable/ic_action_search是指 ic_action_search.png。同样,title属性使用由项目res/values/目录下的XML文件定义的字符串资源.
- 如果应用程序使用可以与安卓2.1版本兼容的支持库,那么showAsActionattribute在namespace不可用。你必须定义自己的XML命名空间并且使用该命名空间的属性前缀。(自定义XML命名空间应根据应用程序名称来确定,可以取任何你想要的名字并且仅在声明文件范围内才能访问)。例如:
- res/menu/main_activity_actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" yourapp:showAsAction="ifRoom" /> ... </menu>
在操作栏添加操作
- 把菜单项放入操作栏,在活动中实行 onCreateOptionsMenu()回调方法以便把菜单资源传递给指定对象。例如:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); }
响应操作按钮
- 当用户按下操作按钮之一或者操作溢出的另一项目时,系统会调用活动 onOptionsItemSelected()回调方式。实现此方法时需要调用给定菜单项的getItemId(),以便于确定按下哪些项目——返回的ID与在对应的 <item>元素android:id属性中的声明值匹配。
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_settings: openSettings(); return true; default: return super.onOptionsItemSelected(item); } }
为低级活动添加向上按钮
- 并非应用程序主要入口的所有界面(活动不属于“home”界面)应该向用户提供导航到应用程序层次结构中的逻辑父类屏幕,按下操作栏的向上按钮即可实行这一操作。
- 在Android4.1(API级别16)或者更高级别运行时,或者在支持库使用ActionBarActivity时,进行向上导航只需要在清单文件中声明父类活动,并且启用操作栏中的向上按钮。
- 例如,如下面所述你可以在清单中声明一个活动的父类:
<application ... > ... <!-- The main/home activity (it has no parent activity) --> <activity android:name="com.example.myfirstapp.MainActivity" ...> ... </activity> <!-- A child of the main activity --> <activity android:name="com.example.myfirstapp.DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" /> </activity> </application>
- 接着通过调用 setDisplayHomeAsUpEnabled()来把应用程序图标显示为向上按钮。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_displaymessage); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // If your minSdkVersion is 11 or higher, instead use: // getActionBar().setDisplayHomeAsUpEnabled(true); }
- 由于系统知道 MainActivity是 DisplayMessageActivity的父类活动,当用户按下向上按钮时,系统会导航到适当的父类活动——不必处理向上按钮相关事情。
- 如需了解向上导航的更多信息,请参阅提供向上导航。

浙公网安备 33010602011771号