我们在使用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();
- }
- }
好了,具体的代码比较简单就不再阐述了,看一下效果图: