Android 实现ActionBar定制
Posted cxchanpin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(); } }
好了。详细的代码比較简单就不再阐述了,看一下效果图:
以上是关于Android 实现ActionBar定制的主要内容,如果未能解决你的问题,请参考以下文章
ClassCastException片段android使用ActionBar
如何隐藏默认片段 actionBar 在 android & kotlin 中创建我们自己的 actionBar