ActionBar自定義

我們在使用Android手機時,經常發現應用中的ActionBar和我們平時使用的ActionBar相差非常大。簡單的說就是,其他應用的ActionBar爲什麼那麼絢麗,自己應用的ActionBar就那麼挫呢?最近有時間就仔細研究了一下關於ActionBar的相關問題。

首先我們來看一下之前所說的“高大上”的ActionBar的效果圖:


查閱了Android文檔以及ActionBar的實現源碼,發現ActionBar是可以定製的(PS:Google還是想的非常周到,不愧爲大神級別的程序員),看到這兒大家對ActionBar的神祕面紗已經揭曉了吧,接下來我們就來看看具體的怎麼實現的。

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. package com.jony.actionbarccustom;  
  2.   
  3. import android.app.ActionBar;  
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. import android.view.Menu;  
  7. import android.view.MenuItem;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.widget.Toast;  
  11.   
  12. public class MainActivity extends Activity {  
  13.   
  14.     @Override  
  15.     protected void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.activity_main);  
  18.         //自定義ActionBar  
  19.         final ActionBar actionBar = getActionBar();  
  20.         actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);  
  21.         actionBar.setCustomView(R.layout.actionbar);//自定義ActionBar佈局  
  22.         actionBar.getCustomView().setOnClickListener(new OnClickListener() {//監聽事件  
  23.             @Override  
  24.             public void onClick(View arg0) {  
  25.                 switch (arg0.getId()) {  
  26.                 case R.id.back:  
  27.                     showToast(R.string.finish);  
  28.                     finish();  
  29.                     break;  
  30.                 default:  
  31.                     break;  
  32.                 }  
  33.             }  
  34.         });  
  35.     }  
  36.   
  37.     @Override  
  38.     public boolean onCreateOptionsMenu(Menu menu) {  
  39.         // Inflate the menu; this adds items to the action bar if it is present.  
  40.         getMenuInflater().inflate(R.menu.actionbar_menu, menu);  
  41.         //使用代碼來動態控制MenuItem的顯示狀態 or XML定義MenuItem的顯示狀態   
  42. /*        MenuItem share = menu.findItem(R.id.share); 
  43.         MenuItem undo = menu.findItem(R.id.undo); 
  44.         MenuItem redo = menu.findItem(R.id.redo); 
  45.         MenuItem save = menu.findItem(R.id.save); 
  46.         share.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
  47.         undo.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
  48.         redo.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
  49.         save.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);*/  
  50.         return true;  
  51.     }  
  52.   
  53.     @Override  
  54.     public boolean onOptionsItemSelected(MenuItem item) {  
  55.         switch (item.getItemId()) {  
  56.         case R.id.undo:  
  57.             showToast(R.string.undo);  
  58.             break;  
  59.         case R.id.redo:  
  60.             showToast(R.string.redo);  
  61.             break;  
  62.         case R.id.save:  
  63.             showToast(R.string.save);  
  64.             break;  
  65.         case R.id.share:  
  66.             showToast(R.string.share);  
  67.             break;  
  68.         default:  
  69.             break;  
  70.         }  
  71.         return super.onOptionsItemSelected(item);  
  72.     }  
  73.   
  74.     private void showToast(int msg){  
  75.         Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();  
  76.     }  
  77. }  

好了,具體的代碼比較簡單就不再闡述了,看一下效果圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章