我們在使用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();
- }
- }
好了,具體的代碼比較簡單就不再闡述了,看一下效果圖: