標籤:android style blog http color 使用
在XML中聲明一個動作按鈕
所有的動作按鈕和其他的可以利用的items都定義在menu資源檔夾中的XML檔案中。為了增加一個動作按鈕到工具列,需要在工程 /res/menu/ 目錄下面建立一個新的XML檔案。
對每個需要添加的item增加一個<item>元素包含到工具列中,例如 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>
上面聲明了查詢動作應該以一個動作按鈕出現當工具列中的空間是足夠大的時候。但是設定動作按鈕應該溢出的(預設的情況下,所有的動作按鈕都是溢出的,但是對於每個你將要設計的動作都應該明確的聲明,這是個好的實踐)。
表徵圖icon屬性attribute需要一個映像資源ID,跟在 @drawable/後面的名字必須是一個bitmap映像,這個映像需要儲存 工程目錄 /res/drawable/ 下面。 例如
"@drawable/ic_action_search" 指的就是 ic_action_search.png。 (每個映像資源最好能提供四個不同大小的形式分別放在drawable-*四個檔案夾下)類似的, 主題title屬性使用一個字串資源,這個字串資源由一個XML檔案定義在 res/values/ 目錄下面。
注意: 當需要為你的程式建立一個icons表徵圖時或者其他的bitmap時,一定要提供多種版本使得不同的表徵圖適應不同大小的螢幕。關於這個的更多的討論將在《支援不同的螢幕》這節課中討論到。
如果你使用的支援庫(support Library)可以相容最低至Android2.1,那麼showAsAction屬性不能android:namespace這樣使用。 相反,這個屬性是由支援庫提供的並且你必須自己定義XML命名空間並使用這個命名空間作為屬性首碼。
將動作添加到工具列
要將功能表項目 menu items添加到工具列,可以在Activity中重載onCreateOptionsMenu()方法 並將菜單資源填充(inflate)到給定的菜單對象中。例如,
@Overridepublic 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()函數。在重載這個方法時,調用 getItemId()函數來確定MenuItem中哪個item被按下, 返回的ID和在<item>元素中響應的 android:id屬性相匹配。
@Overridepublic 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); }}
然後通過調用setDisplayHomeAsUpEnabled()使得這個應用程式圖示向上彈起讓它可以使用
@Overridepublic void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_displaymessage); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // 如果你的SDK版本是11以上的,那麼用 // getActionBar().setDisplayHomeAsUpEnabled(true);}
因為系統知道MainActivity對於DisplayMessageActivity來說是父活動( parent activity), 當使用者按下按鈕時,系統恰當的自動導航到父活動(使用者不必自己處理按鈕的事件。