Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar。

自定义Activity主题和ActionBar样式

在新建的android工程的res/values/styles.xml添加自定义ActionBar样式的代码和自定义Activity主题的代码,并在AndroidMainfest.xml中给需要使用该自定义ActionBar的Activity中加入该主题:

(1)自定义ActionBar样式代码如下:

   <!-- 自定义ActionBar样式,重设ActionBar背景,隐藏actionbar左侧的应用图标和标题 -->

    <style name="actionbar_def_style" parent="@android:style/Widget.Holo.Light.ActionBar">

        <!-- 在样式里面直接替换掉actionbar的背景,避免在有的窗口进入慢时导致进入时显示系统默认的actionbar -->  

        <item name="android:background">@drawable/actionbar_background</item>

        <!-- 在样式里面去掉acionbar的应用图标和标题 -->

        <item name="android:displayOptions">useLogo</item>

    </style>

(2)自定义Activity主题代码如下:

<!-- 自定义窗口样式,需要带ActionBar -->

    <style name="ActivityTheme_Light" parent="android:Theme.Holo.Light">

        <item name="android:actionBarStyle">@style/actionbar_def_style</item> 

    </style>

(3)在AndroidManifest.xml文件中需要使用该自定义ActionBar的Activity中加入该主题如下:

   <activity

            android:name="com.zmy.actionbarstyle.DiyActionBarActivity"

            android:theme="@style/ActivityTheme_Light"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

在Activity中加载ActionBar的自定义布局

(1)ActionBar加载自定义布局的代码封装如下:

/**

* 设置ActionBar的布局

* @param layoutId 布局Id

* 

* */

public void setActionBarLayout( int layoutId ){

    ActionBar actionBar = getActionBar( );

    if( null != actionBar ){

        actionBar.setDisplayShowHomeEnabled( false );

        actionBar.setDisplayShowCustomEnabled(true);

        LayoutInflater inflator = (LayoutInflater)   this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View v = inflator.inflate(layoutId, null);

        ActionBar.LayoutParams layout = new     ActionBar.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

        actionBar.setCustomView(v,layout);

    }

}

(2)在onCreate()方法中调用该方法,并传入自定义的布局文件ID:

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_diy_action_bar);

    // 自定义actionbar的布局

    setActionBarLayout( R.layout.actionbar_port_layout );

}

(3)自定义布局文件“actionbar_port_layout.xml ”代码如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="63.0dp"

    android:id="@+id/actionbarLayoutId"

    android:background="@drawable/actionbar_background">

    <ImageButton

        android:id="@+id/menuBtnId"

        android:layout_marginLeft="12.0dp"

        android:layout_marginTop="12.0dp"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:background="@drawable/menu"

        android:contentDescription="@string/app_name"

        android:onClick="onClick"

        />

    <ImageButton 

        android:id="@+id/noteBtnId"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginTop="12.0dp"

        android:background="@drawable/notes"

        android:contentDescription="@string/app_name"

        android:layout_marginRight="12.0dp"

        android:layout_alignParentRight="true"

        android:onClick="onClick"

        />

    <ImageButton 

        android:id="@+id/editBtnId"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginTop="12.0dp"

        android:background="@drawable/edit"

        android:layout_toLeftOf="@id/noteBtnId"

        android:layout_marginRight="12.0dp"

        android:contentDescription="@string/app_name"

        android:onClick="onClick"

        />

    <ImageButton 

        android:id="@+id/downloadBtnId"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginTop="12.0dp"

        android:background="@drawable/download"

        android:layout_toLeftOf="@id/editBtnId"

        android:layout_marginRight="12.0dp"

        android:contentDescription="@string/app_name"

        android:onClick="onClick"

        />

</RelativeLayout>

在Action中监听ActionBar中按钮的点击事件

/**

* 实现onClick方法,在这里面监听actionbar中按钮的点击事件 

* 

* */

public void onClick( View v ){

    switch( v.getId( ) ){

    case R.id.menuBtnId:{

        showToast( this, "menuBtn" );

    }

    break;

    case R.id.noteBtnId:{

         showToast( this, "noteBtn" );

    }

    break;

    case R.id.downloadBtnId:{

         showToast( this, "downloadBtn" );

    }

    break;

    case R.id.editBtnId:{

        showToast( this, "editBtn" );

    }

    break;

    default:{

    }

    break;

    }

}

源码:http://download.csdn.net/detail/zmywly/6922375

AcitonBar 自定义布局的更多相关文章

  1. 干货之UIButton的title和image自定义布局

    当需要实现一个自定义布局图片和标题的按钮时候,不知道有多少少年直接布局了UIButton,亦或是自定义一个UIView,然后以空白UIButton.UILabel.UIImageVew作为subVie ...

  2. SharePoint 2013 设置自定义布局页

    在SharePoint中,我们经常需要自定义登陆页面.错误页面.拒绝访问等:不知道大家如何操作,以前自己经常在原来页面改或者跳转,其实SharePoint为我们提供了PowerShell命令,来修改这 ...

  3. Collection View 自定义布局(custom flow layout)

    Collection view自定义布局 一般我们自定义布局都会新建一个类,继承自UICollectionViewFlowLayout,然后重写几个方法: prepareLayout():当准备开始布 ...

  4. iOS-UICollectionView自定义布局

    UICollectionView自定义布局 转载: http://answerhuang.duapp.com/index.php/2013/11/20/custom_collection_view_l ...

  5. 详细分享UICollectionView的自定义布局(瀑布流, 线性, 圆形…)

    前言: 本篇文章不是分享collectionView的详细使用教程, 而是属于比较’高级’的collectionView使用技巧, 阅读之前, 我想你已经很熟悉collectionView的基本使用, ...

  6. OC - 31.通过封装的自定义布局快速实现商品展示

    概述 实现效果 设计思路 采用MVC架构,即模型—视图-控制器架构 使用MJExtension框架实现字典转模型 使用MJRefresh框架实现上拉和下拉刷新 上拉刷新,加载新的数据 下拉刷新,加载更 ...

  7. OC - 30.如何封装自定义布局

    概述 对于经常使用的控件或类,通常将其分装为一个单独的类来供外界使用,以此达到事半功倍的效果 由于分装的类不依赖于其他的类,所以若要使用该类,可直接将该类拖进项目文件即可 在进行分装的时候,通常需要用 ...

  8. OC - 29.自定义布局实现瀑布流

    概述 瀑布流是电商应用展示商品通常采用的一种方式,如图示例 瀑布流的实现方式,通常有以下几种 通过UITableView实现(不常用) 通过UIScrollView实现(工作量较大) 通过UIColl ...

  9. Android:创建可穿戴应用 - 自定义布局

    创建自定义布局(Creating Custom Layouts) 本文将介绍如何创建自定义通知以及使用可穿戴UI库来创建自定义布局你同时还需要了解可穿戴设计准则(Wear Design Princip ...

随机推荐

  1. 【safari挖的那些坑】iOS safari 浏览器 时间乱码(ios时间显示NaN) 问题解决

    通常 iOS下时间错误表现形式 问题一: 这个界面运用了大量的日期类型的计算,当我们用JavaScript实例化一个日期对象时,我们可以这样用: var date =new Date(); 上面这段代 ...

  2. ASIHTTPRequest 详解 例子

    目录 目录 发起一个同步请求 创建一个异步请求 队列请求 请求队列上下文 ASINetworkQueues, 它的delegate提供更为丰富的功能 取消异步请求 安全的内存回收建议 向服务器端上传数 ...

  3. shell脚本编写汇集

    一.替换文本: ##1 sed -i 's/disabled=true/disabled=false/' /etc/fdfs/storage.conf ##2 sed -i 's/base_path= ...

  4. Sublime Text 常用快捷键

    /* 之前用过的好多的编辑器,从IT大牛们的博客里知道了他们所谓的Vim,Vi,Emacs等,也都挨个装上试了,不尽人意,但自从遇到了Sublime Text,甚是喜欢,有道是“情不知何而起,一往而深 ...

  5. 大数据笔记01:大数据之Hadoop简介

    1. 背景 随着大数据时代来临,人们发现数据越来越多.但是如何对大数据进行存储与分析呢?   单机PC存储和分析数据存在很多瓶颈,包括存储容量.读写速率.计算效率等等,这些单机PC无法满足要求. 2. ...

  6. Underscore.js 常用类型判断以及一些有用的工具方法

    1. 常用类型判断以及一些有用的工具方法 underscore.js 中一些 JavaScript 常用类型检查方法,以及一些工具类的判断方法. 首先我们先来谈一谈数组类型的判断.先贴出我自己封装好的 ...

  7. 判断线段相交(hdu1558 Segment set 线段相交+并查集)

    先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...

  8. el和jstl

    <%@page import="cn.bdqn.bean.News"%> <%@ page language="java" import=&q ...

  9. IIS配置

    IIS配置文档: 1.安装IIS.控制面板→程序→打开关闭Windows功能,Web管理服务和万维网服务都勾上. 2.部署网站:ASP.Net项目的发布:项目中点右键“发布”,选择“文件系统”,发布到 ...

  10. 在Github上面搭建Hexo博客(一):部署到Github

    什么是Hexo Hexo是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在Github和Heroku上.并且有很多人为其制作了很多优秀的主题(theme),你可以根据自己的喜好进行设 ...