Android 实现ActionBar定制

来源:互联网 发布:小米线刷软件 编辑:程序博客网 时间:2024/06/04 22:41

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

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


源码下载地址

13 3
原创粉丝点击