• 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();  
            }  
        }  

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

  • 相关阅读:
    这个星期一好像有点无聊
    SQL、LINQ、Lambda三种方式比较
    [C#基础知识]Class和Struct的区别
    C#判断大批量的路径是否存在时,如何缩短判断时间
    批处理 for参数之token详解
    批处理Delims的基本知识
    读取txt文本中每一条路径(一行)并判断,路径不存在的保存在另一txt文本中
    批处理获取一些系统参数
    Cannot read configuration file due to insufficient permissions
    my97datepicker日期选择插件的用法
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4543260.html
Copyright © 2020-2023  润新知