自定义Actionbar

自定义Actionbar有两种方式:代码方式和xml方式

先说代码方式:

//getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.ad_action_bar_gradient_bak));
//getSupportActionBar().setDisplayHomeAsUpEnabled(false);  设置不显示左边的Indicator,对应style:android:homeAsUpIndicator
//getSupportActionBar().setDisplayShowHomeEnabled(false);  设置不显示左边的HomeIcon
//getSupportActionBar().setDisplayUseLogoEnabled(true);

在代码中使用getActionBar().setDisplayShowHomeEnabled(false)不显示ActionBar的图标,但是在进入程序瞬间还是会闪现这个图标,该怎么写才好?

这个问题应该是没法避免的,应用android系统在初始化actiivty时,必然以默认的style来初始,然后才回到到activity的onCreate等个函数,你在onCreate里等于是重新设置actionbar的各个属性,必然有闪烁,所以:不要在在代码里设置actionbar的属性,体现在界面上,生效会延会有延时,出现闪现的现象,所以你看到这些示例代码都被我注释掉了

那有没有其他的解决方案?有,就是我们接下来要说的xml方式:

先说时候them的优先级,在AndroidManifest.xml中,如果application和activity同时指定了不同的android:theme="xxx",那么根据作用域的规则,activity的theme优先级就高于application,也就是说,如果遇到有冲突的styley定义,那么以activity定义的style为准。

AndroidManifest.xml:

<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
    android:name=".ui.ActivityMain"
    android:label="@string/app_name"
    android:theme="@style/StyledIndicators">
    <intent-filter>
	<action android:name="android.intent.action.MAIN" />
	<category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

注意,这里的StyledIndicators是actity的style(或者时候them,两者区别不大),这个styley让ActivityMain完全无视appliccation的theme

styles.xml:

    <style name="StyledIndicators" parent="@android:style/Theme.Holo.Light">
        <item name="vpiCirclePageIndicatorStyle">@style/CustomCirclePageIndicator</item>
        <item name="vpiLinePageIndicatorStyle">@style/CustomLinePageIndicator</item>
        <item name="vpiTitlePageIndicatorStyle">@style/CustomTitlePageIndicator</item>
        <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item>
        <item name="vpiUnderlinePageIndicatorStyle">@style/CustomUnderlinePageIndicator</item>
        <item name="android:actionBarStyle">@style/StyledIndicators.ActionBar</item>
        <item name="android:homeAsUpIndicator">@null</item>  自定义的Actionbar里这个这个属性不起作用,移动这里才起作用

    </style>    

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

         <!-- Leivn add -->
        <!-- <item name="android:displayOptions">useLogo|showHome|showTitle</item> -->    注意这个属性,默认三个都显示:useLogo:坐标的小箭头;showHome:中间的图标,默认使用app的icon;showTitle:要不要显示标题,默认标题就是app的名称
        <item name="android:displayOptions">showHome|showTitle</item>
        <item name="android:icon">@drawable/actionbar_home_drawable</item>
        <!--  android:homeAsUpIndicator 指定UpIndicator图标,就是最左边那个小箭头,在这里不起作用,移到上一层就可以,可能是google的bug。如果不想设置任何图标,那个这里的值设置为@null即可,注意一定要有@符合,否则crash
        <item name="android:homeAsUpIndicator">@drawable/new_indicator</item>  -->
         <item name="android:background">@drawable/ad_action_bar_gradient_bg</item>
         <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
    </style>
    <!--ActionBar title style-->
    <style name="MyActionBarTitleText"
           parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"  >
         <!-- 更改Actionbar title字体颜色 -->
        <item name="android:textColor">@color/actionBarTitleTextcolor</item>
    </style>

注意,很多时候我们使用的是actionbarSherlock这个开源的acitonbar,没关系,一样可以自定义actionbar的样式,方法同上,没有区别。

可能有些地方用的还是不标准,还请各位指正。最后贴一张效果图:

参考文档:http://www.myexception.cn/mobile/1629183.html

自定义Actionbar,布布扣,bubuko.com

时间: 2024-07-31 14:50:48

自定义Actionbar的相关文章

自定义ActionBar标题与菜单中的文字样式

自定义标题文字样式 标题样式是ActionBar样式的一部分,所以要先定义ActionBar的样式 <style name="AppTheme" parent="AppBaseTheme"> <item name="android:actionBarStyle">@style/CustomActionBar</item> </style> 然后在ActionBar的样式中通过android:titl

自定义ActionBar图标

<style name="Theme.glTheme" parent="android:Theme.Holo"><item name="android:homeAsUpIndicator">@drawable/gl_up_indicator</item></style> If you are supporting pre-3.0 with your application be sure you p

Android 自定义ActionBar

Android 3.0及以上已经有了ActionBar的API,可以通过引入support package在3.0以下的平台引用这些API,但这儿呢,完全自定义一个ActionBar,不用引入额外jar包,参照的是开源的UI组件 GreeenDroid,项目主页:https://github.com/cyrilmottier/GreenDroid .提取出关于ActionBar的相关文件,你可以放在自己的项目中,最后会附下载地址.下面说下在程序中的用法. 新建一个TestActionBar项目,

Android自定义ActionBar

Android 3.0及以上已经有了ActionBar的API,可以通过引入support package在3.0以下的平台引用这些API,但这儿呢,完全自定义一个ActionBar,不用引入额外jar包,参照的是开源的UI组件 GreeenDroid,项目主页:https://github.com/cyrilmottier/GreenDroid .提取出关于ActionBar的相关文件,你可以放在自己的项目中,最后会附下载地址.下面说下在程序中的用法. 新建一个TestActionBar项目,

Android:自定义ActionBar高分辨率下左边缺一块的解决方案

这是自定义ActionBar样式的布局(使用的是SherlockActionBar,整体自定义) View customView = getLayoutInflater().inflate(R.layout.actionbar_custom_view, null); ActionBarUtil.init(); // ... getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setCusto

Android 自定义ActionBar.Tab对象的表现

 最近想修改ActionBar.Tab对象的文本字体和颜色 发现该对象提供的接口非常有限 而网上搜索关于ActionBar.Tab结果大多比较早 使用的也不是google提供的例子中的ActionBar 于是自己研究了一天 找到了使用接口setCustomView来自定义ActionBar.Tab对象 先通过ActionBar.getTabAt(int) 获得一个ActionBar.Tab对象 然后调用setCustomView 使用自定义的layout 注意这里没有生产layout的对象 

android新版本support包V7后自定义actionbar左边有一块空白无法填充

1. 问题描述 最近我自定义actionbar时发现自定义actionbar左边有一块空白无法填充.一开始我是发现支持包V7的../res/values/styles_base.xml文件内的 <style name="Base.Widget.AppCompat.ActionBar" parent=""> <item name="displayOptions">showTitle</item> <item

自定义actionbar 并去掉左边空白

通过自定义actionbar布局来改变actionbar的样式,简单方便而且美观,但是有个细节一定要注意就是在高分辨率下左边空白的问题,一般在720以上的分辨率下回发现无论你如何改布局文件总会有一个小的空白 public void setActionBarLayout(int layoutId) { ActionBar actionBar = getActionBar(); if (null != actionBar) { //去掉空白 actionBar.setTitle("");

自定义actionbar的使用

来美图入职有几天了,刚拿到需求,看了一下所需要的actionbar,得,自定义的还没用过...赶紧脑补脑补, //ActionBar加载自定义布局的代码封装 public void setActionBarLayout( int layoutId ){ ActionBar actionBar = getActionBar( ); if( null != actionBar ){ //隐藏图标 actionBar.setDisplayShowHomeEnabled( false ); //使图标不