Android 实现ActionBar定制

我们在使用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();  
        }  
    }  

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

原文地址:https://www.cnblogs.com/zhujiabin/p/4543260.html