注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。
原文鏈接: http://developer.android.com/training/basics/actionbar/adding-buttons.html
Action Bar 允許你為和應用當前Context相關的最重要的action事件添加按鈕。那些在 Action Bar 中直接顯示出來的圖標或文字就是所謂的 Action Buttons 。在Action Bar中無法完整顯示的或者不是足夠重要的操作按鈕,都被隱藏在了更多操作這一按鈕中,如下圖所示:
?圖1. 具有一個“搜索”的操作按鈕和一個“更多操作”(action overflow)按鈕(其中包含了更多的操作)的Action Bar
?
一). 在XML中列舉出操作
所有的操作按鈕還有其他在更多操按鈕中的所有項目,都在一個菜單資源( menu resource )的XML文件中定義。為了把操作添加到Action Bar中,在項目的“ res/menu/ ”目錄下創建一個新的XML文件。
為每一個你希望添加到Action Bar中的項目添加一個 <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 >
上述用于聲明的代碼表明:如果Action Bar的空間充足,那么搜索的操作按鈕將會顯示,但是設置這一操作的按鈕將永遠在“更多操作”當中。(所有的操作都會默認的在“更多操作”中顯示,但顯示地為每個操作聲明設計的意圖是一個好的習慣)。
下載Action Bar圖標:
為了和Android圖標風格( iconography )達到完美的視覺效果,建議你使用 Action Bar Icon Pack 提供的圖標。
這個“ icon ”屬性字段需要一個圖像的資源ID。在“ @drawable/ ”之后跟隨著的名字必須是一個你在項目工程的“ res/drawable/ ”存儲好的一幅位圖文件。例如:“ @drawable/ic_action_search ”代表了“ ic_action_search.png ”。類似的,“ title ”屬性字段使用的是在項目工程中“ res/values/ ”目錄下通過XML文件定義好的字符資源,這些都在 Building a Simple User Interface 有討論過。(對應博客鏈接: http://www.cnblogs.com/jdneo/p/3439108.html )
Note:
當為你的應用創建圖標和其他位圖時,一個很重要的事情是你最好為各種分辨率屏幕的設備準備多個版本。這些在課程: Supporting Different Screens 有更多的討論。
如果你的應用使用了Support Library 來兼容低至Android 2.1版本的系統,“ showAsAction ”這一屬性字段并不屬于“ android: ”命名空間。不過這個屬性字段由 Support Library 來提供,所以你必須定義你自己的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 >
?
二). 為Action Bar添加操作
為了將這個菜單項添加進Action Bar,我們需要在你的activity中實現 onCreateOptionsMenu() 這一回調函數,以此來將菜單資源填充進菜單( Menu )對象中,例如:
@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); }
?
三). 操作按鈕的響應
當用戶按下了其中一個操作按鈕,或者“更多操作”中的操作按鈕,系統會調用你的activity中的回調函數 onOptionsItemSelected() ,在你這個方法的實現中,對參數 MenuItem 調用 getItemId() 方法來確定是哪個按鈕被按下了。返回的資源ID(ResId)是和你在 <item> 標簽中“ android:id ”這一屬性字段所聲明的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); } }
?
四). 為上一級Activity添加返回操作
圖2. Gmail的返回按鈕
所有你的應用中非主入口的畫面(即指的是除了你的應用的“home”畫面外的所有其他畫面)必須為用戶提供一個導航至應用邏輯層次結構中的父畫面,這可以通過讓用戶按下“Action Bar”中的“返回(Up)”按鈕來實現。
當在Android 4.1(API Level 16)或更高的系統版本中運行時,或者使用 Support Library 提供的 ActionBarActivity 時,實現返回的導航功能,只需要你在清單文件中聲明父Activity,并且激活action bar的返回按鈕。
例如,你可以在清單文件中這樣寫:
< 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 ”的父Activity,當用戶按下返回按鈕,系統將會自動地導航至父Activity,你不需要去對返回按鈕做任何事件處理。
閱讀 Providing Up Navigation ,獲取更多信息。
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
