FROM : http://developer.android.com/training/basics/actionbar/adding-buttons.html
活动栏运行你根据APP当前背景情况为最重要的活动条增加活动按钮。活动按钮以图片或文字的实现出现,作为活动按钮。活动不能容纳在活动栏或不够重要而隐藏在活动栏中隐藏。
如上图中,活动栏有一个活动按钮,这个活动按钮具有查找功能,和活动溢出栏,它里面有多个附加的动作。
所有的活动按钮和活动溢出栏里的其他可见的活动条被定义在一个XML 菜单资源中。增加一个动作到活动栏,创建
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>
增加action_search到res/menu/main.xml中
在res/中创建drawable文件夹,增加ic_action_search.png图片,在res/value/strings.xml中增加字符串资源action_search
当活动栏中空间可用时,这个声明查找动作应该作为一个动作按钮出现,而且设置动作应该永远出现在活动溢出位置。默认情况下,所有的动作均在活动溢出部位,但是一个好的经验为每个动作明确声明你的设计意图。
注意:当为你的APP创建按钮和其他位图图片时,你提供多版本是非常重要的。在后面将单独讨论。
<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>
为了把菜单的项放入活动栏,在你的活动里,实现这个onCreateOptionMenu()回调函数,添加菜单资源到菜单对象中。例如:
@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); }
修改为inflater.inflate(R.menu.main, menu);
@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); } }
增加后如下,注意,在这里增加两个openSearch()和openSettings()后编译有错误,根据提示增加两个方法
@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); }