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. 使用cocoapods导入第三方后 报错_OBJC_CLASS_$_XXX

    我们手动导入第三方库的时候,感觉管理不是很方便,于是会选择使用Cocoapods管理.现在记录一下使用心得,当使用cocoapods导入afnetworking或者其他框架的时候,发现调用的时候总是报 ...

  2. android系统的日志查看

    日志跟踪(alog) 在我们开发手机软件的过程中,常常需要通过USB线连接电脑看日志.但在windows下,我们要安装驱动.有的android板子,就不支持USB调试.所以我开发了这个小工具.方便打开 ...

  3. SKEffectNode类

    继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架  /System/L ...

  4. [Javascript] JavaScript Array Methods in Depth - push

    Array push is used to add elements to the end of an Array. In this lesson we'll see how the push met ...

  5. String,StringBuffer与StringBuilder的差别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  6. css中的垂直居中方法

    单行文字 (外行高度固定) line-height 行高, 将line-height值与外部标签盒子的高度值设置成一致就可以了. height:3em; line-height:3em; 多行文字 图 ...

  7. nginx 根据IP 进行灰度发布

    灰度发布,简单来说,就是根据各种条件,让一部分用户使用旧版本,另一部分用户使用新版本. nginx 的语法本身可以看作是一门小型的编程语言,通过简单的编程,可以轻松实现基于IP的灰度发布. 需求:搭建 ...

  8. 让页脚footer永远固定在页面的底部,而不是永远固定在显示器屏幕的底部的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. C#中如何获取系统环境变量等

    C#中获取系统环境变量需要用到Environment 类. 其中提供了有关当前环境和平台的信息以及操作它们的方法.该类不能被继承 以下代码得到%systemdrive%的值,即“C:” string ...

  10. 一个控制台贪吃蛇小游戏(wsad控制移动)

    /******************************************** * 程序名称:MR.DUAN 的贪吃蛇游戏(链表法) * 作 者:WindAutumn <flutti ...