自己定义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方式:

先说一下theme的优先级,在AndroidManifest.xml中,假设application和activity同一时候指定了不同的android:theme="xxx",那么依据作用域的规则,activity的theme优先级就高于application,也就是说,假设遇到有冲突的style定义。那么以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,两者差别不大)。这个style让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>

xml代码里面加入了注解的地方,就是自己定义actionbar相关的代码

注意,非常多时候我们使用的是actionbarSherlock这个开源的acitonbar,没关系。一样能够自己定义actionbar的样式,方法同上,没有差别。

可能有些地方用的还是不标准,还请各位指正。

最后贴一张效果图:

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

时间: 2024-08-10 02:09:38

自己定义Actionbar的相关文章

【android自定义控件】LinearLayout定义ActionBar样式

其实大家看到都ActionBar说白了,就是自定义的一个Linearlayout或者RelatedLayout:今天就练练LinearLayout 自定义. LinearLayout自定义方法有多种: 1.自定义xml布局,然后加载布局,自定义一个View继承LinearLayout 2.在自定义控件中声明它的所有子元素,然后在Layout文件中像使用LinearLayout一样去进行布局, 第二种比较烦 ,它需要在Layout文件中定义好子元素之后,要在代码 onFinishInflate()

Android-自定义Actionbar左侧覆盖不全的bug修复

今天遇到一个很蛋疼的问题,就是在自定义Actionbar的时候,setCustomView中,自定义的view怎么也覆盖不了整个视图,左侧一直留有一个空白,看下图: 所有能加的代码都已经加上了,actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplay

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

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

【Android 应用开发】 ActionBar 样式具体解释 -- 样式 主题 简单介绍 Actionbar 的 icon logo 标题 菜单样式改动

作者 : 万境绝尘 ([email protected]) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/39269163 演示样例代码下载 : -- GitHub : https://github.com/han1202012/Octopus_ActionBarStyle.git -- CSDN : http://download.csdn.net/detail/han1202012/7926959 一. 样式 和 主题

Android 实现ActionBar定制

我们在使用Android手机时,常常发现应用中的ActionBar和我们平时使用的ActionBar相差很大.简单的说就是,其它应用的ActionBar为什么那么绚丽,自己应用的ActionBar就那么挫呢?近期有时间就细致研究了一下关于ActionBar的相关问题. 首先我们来看一下之前所说的"高大上"的ActionBar的效果图: 查阅了Android文档以及ActionBar的实现源代码.发现ActionBar是能够定制的(PS:Google还是想的很周到,不愧为大神级别的程序猿

低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图

在ActionBar中添加Tab是很有用的技巧.在support V7库的支持下,我们几乎可以用和之前一样的方式来添加Tab,对于Tab来说,我们可以和MenuItem一样,给他定义自己的视图.我这里定义了个进度条,主要是来说明这个问题.本系列的博文也将接近尾声了,后面就是个定义ActionBar样式和一个仿照微信的实例,顺便讲解下Fragment和ViewPager的用法. activity_main.xml(定义了一个Fragment) <RelativeLayout xmlns:andro

android之官方导航栏ActionBar(三)之高仿优酷首页

一.问题概述 通过上两篇文章,我们对如何使用ActionBar大致都已经有了认识.在实际应用中,我们更多的是定制ActionBar,那么就需要我们重写或者定义一些样式来修饰ActionBar,来满足具体的需要.我们就以优酷首页为例,一起学习下ActionBar的综合应用. 二.Android系统ActionBar样式的定义 首先,我们先认识一下android系统中是如何定义ActionBar样式的,这里我们以Theme.Holo.Light主题为例,通过源码我们可以看到在该主题中关于Action

【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改

作者 : 万境绝尘 ([email protected]) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/39269163 示例代码下载 : -- GitHub : https://github.com/han1202012/Octopus_ActionBarStyle.git -- CSDN : http://download.csdn.net/detail/han1202012/7926959 一. 样式 和 主题 资源

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

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