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

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

源代码下载地址

时间: 2024-12-25 19:20:44

Android 实现ActionBar定制的相关文章

子墨庖丁Android的ActionBar源码分析 (一)实例化

如果你从事过Android客户端开发,相信你对ActionBar这套框架并不陌生,或者说你并不了解它,但是你应该时不时的要跟它打交道.抛开ActionBar的实现不说,ActionBar实际上是对Android的TitleBar行为的抽象,这种框架可以适用于这种模式的应用,是对需要的行为视图的抽象.当然或许你也和我一样,对ActionBar的实现效率并不满意,因为你打开它的视图,你会发现它的实现非常的ugly.不过我们庆幸的看到的是,ActionBar在设计的时候就并不是以一个强类型的姿态存在,

Android中ActionBar以及menu的代码设置样式

Android中ActionBar以及menu的代码样式如何设置?今天麦子学院android开发老师主要介绍Android中ActionBar以及menu的代码设置样式,,有需求的朋友可以参阅下 menu有些xml代码 http://schemas.android.com/apk/res/android"> <="" div=""> android:title="查找1" android:orderInCategory

Android中ActionBar及Overflow的显示

转自:http://www.sxt.cn/u/756/blog/4386 最近在按照Android的API文档学习Android中actionbar的使用,Action bar 最基本的形式,就是为 activity 显示标题,并且在标题左边显示一个 app icon.在这样简单的形式下,对于所有的 activity 来说,action bar 对告知用户他们当前所处的位置十分有用,并为你的 app 维护了持续的同一标识.Action Bar是一种新増的导航栏功能,在Android 3.0之后加

[Android UI] ActionBar 自定义属性

actionbar 默认放在顶部, 如果在application或者activity中加入 android:uiOptions="splitActionBarWhenNarrow" 那么,actionbar将在底部显示. 自定义属性,包括自定义actionbar的背景颜色 <!-- the theme applied to the application or activity --> <style name="CustomActivityTheme&quo

Xamarin.Android之ActionBar与菜单

一.选项卡 如今很多应用都会使用碎片以便在同一个活动中能够显示多个不同的视图.在Android 3.0 以上的版本中,我们已经可以使用ActionBar提供的Tab来实现这种效果,而不需要我们自己去实现碎片的切换.ActionBar默认是不具备选项卡功能的,所以我们需要给一个属性赋上对应的枚举,比如下面的方式将开启选项卡. 1 ActionBar.NavigationMode = ActionBarNavigationMode.Tabs; 开启之后,我们就需要往ActionBar中添加Tab,当

Android系统的定制---定制系统开机动画

4.3定制Android平台系统 通常产品厂商在拿到Android源码后会在Android源码基础上进行定制修改,以匹配适应自己的产品,从本节开始,我们从最原始的Android源码系统里一步一步定制出自己的Android系统.本节主要内容包含:根据Android源码,添加新产品编译项,定制系统启动界面和文字,定制系统启动动画和声音,定制系统桌面. 4.3.1添加新产品编译项 Android系统的源代码是一个逻辑结构非常独立工程,在一套Android源码中可以编译出多个产品映像,在需要编译某一个产

【Android】ActionBar的使用(1)

前(fei)言(hua):转行iOS开发半年,很久没接触Android了,前几天去上课,听着实在无聊,随手拿了同学的一本<Android UI设计>,发现有好多基础知识自己虽然用过,但是都是当初做Android开发时,当项目需要的用到的时候才去百度,control+c和control+v后,便草草完事,以至于有时再需要使用某个控件或者功能时,再去百度或者翻查以前的代码.虽然曾经做了2年Android开发,但只是做了几个很水的app,为了不亏欠那两年奋斗的青春,现在开始,我将写一些关于Andro

[Android UI]ActionBar随ScorllView上下拖动而透明度渐变效果

我看到越来越多的应用使用这样的效果,如QQ空间5.0的主界面,确实很好看!大概就搜了一下相关的实现方式,发现早就有了相关的方案: 仿QQ空间滚动ActionBar透明度变化Demo 还有我在github上看到就有这样的实现方式,这也是本博文的主要核心内容: 具体请查看:https://github.com/AChep/Header2ActionBar 效果如下: 这是Demo结构: 1.FadingActionBarHelper.java 这个类是处理Actionbar的核心类,处理对scrol

深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)

第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同目录下,对于这个大的一个工程,Android通过自己的编译系统完成编译过程. 4.1.1 Android编译系统介绍 Android和Linux一样,他们的编译系统都是通过Makefile工具来组织编译源码的.Makefile工具用来解释和执行Makefile文件,在Makefile文件里定义好工程