zoukankan      html  css  js  c++  java
  • 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();
        }
    }
    

    好了。详细的代码比較简单就不再阐述了,看一下效果图:


    源代码下载地址

  • 相关阅读:
    查询论文引用次数及格式和相似论文的方法
    JAVA日期加减运算
    luogu2833 等式
    luogu2261 [CQOI2007] 余数之和
    luogu2822 组合数问题
    luogu3942 将军令 贪心
    luogu3941 入阵曲
    luogu3939 数颜色
    二分查找总结
    luogu3938 斐波那契
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6850142.html
Copyright © 2011-2022 走看看