標籤:actionbar android
我們在使用Android手機時,經常發現應用中的ActionBar和我們平時使用的ActionBar相差非常大。簡單的說就是,其他應用的ActionBar為什麼那麼絢麗,自己應用的ActionBar就那麼挫呢?最近有時間就仔細研究了一下關於ActionBar的相關問題。
首先我們來看一下之前所說的“高大上”的ActionBar的:
查閱了Android文檔以及ActionBar的實現源碼,發現ActionBar是可以定製的(PS:Google還是想的非常周到,不愧為大神層級的程式員),看到這兒大家對ActionBar的神秘面紗已經揭曉了吧,接下來我們就來看看具體的怎麼實現的。
package com.jony.actionbarccustom;import android.app.ActionBar;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Toast;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //自訂ActionBar final ActionBar actionBar = getActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); actionBar.setCustomView(R.layout.actionbar);//自訂ActionBar布局 actionBar.getCustomView().setOnClickListener(new OnClickListener() {//監聽事件 @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.back: showToast(R.string.finish); finish(); break; default: break; } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.actionbar_menu, menu); //使用代碼來動態控制MenuItem的顯示狀態 or XML定義MenuItem的顯示狀態 /* MenuItem share = menu.findItem(R.id.share); MenuItem undo = menu.findItem(R.id.undo); MenuItem redo = menu.findItem(R.id.redo); MenuItem save = menu.findItem(R.id.save); share.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); undo.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); redo.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); save.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);*/ return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.undo: showToast(R.string.undo); break; case R.id.redo: showToast(R.string.redo); break; case R.id.save: showToast(R.string.save); break; case R.id.share: showToast(R.string.share); break; default: break; } return super.onOptionsItemSelected(item); } private void showToast(int msg){ Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); }}
好了,具體的代碼比較簡單就不再闡述了,看一下:
源碼