Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮
原文地址 : http://android.xsoftlab.net/training/basics/actionbar/adding-buttons.html
添加Action按鈕
ActionBar允許在當前的APP上下文內添加很多重要的功能按鈕。這樣便可以通過圖標或者文字作為功能按鈕直接展示在ActionBar上。功能按鈕如果沒有足夠空間或無足輕重的按鈕都會隱藏在隱藏按鈕下。
在XML指定功能
所有的功能按鈕包括其它在隱藏按鈕下的功能按鈕都可以通過XML菜單資源來定義。為了添加功能到ActionBar,需要在res/menu/目錄下創建一個新的xml文件。
為每一個需要添加到ActionBar的按鈕添加一個< item>標簽:
<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>這里聲明了當ActionBar有可用空間的時候Search功能應該作為一個按鈕放在ActionBar上。但是設置按鈕會總是出現在下拉列表中(默認情況下,所有的功能都會出現在下拉列表中,這對于每一個功能顯示的聲明你的設計意圖是最好的鍛煉)。
icon屬性這里要求一個圖片的資源ID,這里跟的是@drawable/name,這里的name必須是保存在工程中res/drawable/目錄下保存的位圖圖像名稱。比如”@drawable/ic_action_search”就是引用了一個名為ic_action_search.png的圖片資源。很相似的,title屬性也是使用了一個在XML文件中定義的字符串資源。
Note:當為應用創建圖標或者其它的位圖圖像時,drawable文件夾對于提供不同版本的屏幕密度資源來說是很重要的一點。
如果為了兼容像Android 2.1這種低版本而使用了支持庫,showAsAction屬性對于命名空間android:是不可用的。如果要使用支持庫的話必須要在XML中定義自定義的XML命名空間標識符,然后再使用這個命名空間的標識符(自定義的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>添加功能按鈕到ActionBar上
為了將菜單按鈕直接放置到ActionBar上,需要重寫實現activity中的onCreateOptionsMenu()方法,然后加載菜單資源到回調方法的參數menu對象中:
@Override public boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu items for use in the action barMenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.main_activity_actions, menu);return super.onCreateOptionsMenu(menu); }響應功能按鈕
當用戶點擊了其中一個功能按鈕或者其它下拉列表中按鈕之后,然后系統會調用activity中的
onOptionsItemSelected()方法。在實現的這個方法中,調用回調參數MenuItem的getItemId()方法返回的值與ID進行匹配,去決定是哪個功能按鈕按下的。這里的ID便是在XML中聲明的< item>標簽中的android:id屬性中定義的。
為低等級的Activity添加返回按鈕
Note:Gmail的返回按鈕
應用中的所有Activity不都是應用的主入口,所以應該在ActionBar上提供一個返回按鈕,以便讓用戶可以通過點擊返回按鈕返回到上一個屏幕頁面。
當運行在Android 4.1或者更高版本上,又或者是使用了ActionBarActivity的支持庫的應用,可以在清單文件中簡單的申明ActionBar的返回按鈕所要返回的界面:
<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); }因為現在系統知道了DisplayMessageActivity的父界面為MainActivity,當用戶按下了返回按鈕,然后系統會適當的導航界面到MainActivity,所以你不需要自己處理返回按鈕的點擊事件。
關于導航按鈕的更多信息,請參見:Providing Up Navigation
總結
以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:添加ActionBar之添加Action按钮的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MiningZhiDaoQACorpus
- 下一篇: 推荐系统中的Embedding