ActionBar自定义

来源:互联网 发布:apache tomcat modjk 编辑:程序博客网 时间:2024/05/01 04:37

我们在使用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. }  

好了,具体的代码比较简单就不再阐述了,看一下效果图:

0 0
原创粉丝点击