Android轩辕剑之ActionBar之四

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229

8添加下拉式导航

        作为Activity内部的另一种导航(或过滤)模式,操作栏提供了内置的下拉列表。下拉列表能够提供Activity中内容的不同排序模式。
        启用下拉式导航的基本过程如下:
创建一个给下拉提供可选项目的列表,以及描画列表项目时所使用的布局;
实现ActionBar.OnNavigationListener回调,在这个回调中定义当用户选择列表中一个项目时所发生的行为;
用setNavigationMode()方法该操作栏启用导航模式;
ActionBar actionBar = getActionBar();

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
        注意: 你应该在activity的onCreate()方法中执行以上代码。
用setListNavigationCallbacks()方法给下拉列表设置回调方法。
actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);

9Action Bar的样式

        如果你对应用程序中的可视构件进行了定制化的设计,那么你可能也会要对action bar做一些重新设计,以便跟应用程序的设计匹配。要这样做的话,需要使用Android的样式与主题框架中的一些特殊的样式属性来重新设置操作栏的样式。
        注意:改变外观的背景图片依赖与当前按钮的状态(选择、按下、解除选择),因此需要使用state list drawable。还要确保使用NinePatch类型的drawable资源,以便允许图片的拉伸。NinePatch类型的图片应该比40像素高30像素宽的图片要小(mdpi下)。

9.1普通样式

android:windowActionBarOverlay:这个属性声明了操作栏是否应该覆盖Activity布局,而不是相对Activity的布局位置的偏移。这个属性的默认值是false。
        通常,在屏幕上,action bar需要它自己的空间,并且把剩下的空间用来填充Activity的布局。当action bar是覆盖模式时,Activity会使用所有的有效空间,系统会在Activity的上面绘制action bar。如果你想要在action bar隐藏和显示时,布局中的内容保持固定的尺寸好位置,那么这种覆盖模式是有用的。你也可能只是为了显示效果来使用它,因为你可以给action bar设置半透明的背景,以便用户依然能够看到action bar背后的Activity布局。
        注意:默认情况下,Holo主题会用半透明背景来绘制action bar。但是,你能够用自己的样式来修改它,并且默认的情况下,DeviceDefault主题在不同的设备上可能使用不透明的背景。
        覆盖模式被启用时,Activity布局不会感知到action bar覆盖在它的上面,因此,在action bar覆盖的区域,最好不要放置一些重要的信息或UI组件。适当的情况下,你能够引用平台的actionBarSize值来决定操作栏的高度,例如,在XML布局文件中引用这个值。
<SomeView

    ...

    android:layout_marginTop="?android:attr/actionBarSize" /> 
        你还能够用getHeight()方法在运行时获取action bar的高度。如果在Activity生存周期的早期调用这个方法,那么在调用时所反映的action bar的高度可能不包括被堆放的action bar(因为导航选项标签)。要看如何在运行时判断action bar总的高度,请看simple中Honeycomb Gallery的TitlesFragment类。

9.2Action Items

android:actionButtonStyle:给操作项按钮定义样式资源。
android:actionBarItemBackground:给每个操作项的背景定义可描画资源(被添加在API Level 14中)。
android:itemBackground:给每个溢出菜单项的背景定义可描画资源。
android:actionBarDivider:给操作项之间的分隔线定义可描画资源(被添加在API Level 14中)
android:actionMenuTextColor:给显示在操作项中文本定义颜色。
android:actionMenuTextAppearance:给显示在操作项中文本定义样式资源。
android:actionBarWidgetThem:给作为操作视窗被填充到操作栏中的可视构件定义主题资源(被添加在API Level 14中)。

9.3导航标签

android:actionBarTabStyle:给操作栏中的选项标签定义样式资源。
android:actionBarTabBarStyle:给显示在导航选项标签下方的细条定义样式资源。
android:actionBarTabTextStyle:给导航选项标签中的文本定义样式资源。

9.4下拉列表

android:actionDropDownStyle:给下拉导航列表定义样式(如背景和文本样式)。
    下面例子XML文件中给action bar定义了一些定制的样式。
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <!--应用程序或activity应用的主题-->

    <style name="CustomActivityTheme" parent="@android:style/Theme.Holo">

        <item name="android:actionBarTabTextStyle">@style/CustomTabTextStyle</item>

        <item name="android:actionBarDivider">@drawable/ab_divider</item>

        <item name="android:actionBarItemBackground">@drawable/ab_item_background</item>

    </style>

    <!--  action bar标签文本样式-->

    <style name="CustomTabTextStyle" parent="@android:style/TextAppearance.Holo">

        <item name="android:textColor">#2456c2</item>

    </style>

</resources>
        注意:一定要在<style>标签中声明一个父主题,这样定制的主题可以继承所有没有明确声明的样式。在修改action bar样式时,使用父主题是至关重要的,它会让你能够简单的覆写你想要改变的action bar样式,而不影响你不想修改的样式(如文本的外观或操作项的边缘)。
        你能够在清单文件中把定制的主题应用到整个应用程序或一个单独的Activity对象。
<application android:theme="@style/CustomActivityTheme" ... />

9.5高级样式

        如果需要比上述属性更高级的样式,可以在Activity的主题中包含android:actionBarStyle和android:actionBarSplitStyle属性。这两个属性的每一个都指定了另一种能够给action bar定义各种属性的样式,包括带有android:background、android:backgroundSplit、android:backgroundStacked属性的不同背景。如果要覆盖这些action bar样式,就要确保定义一个像Widget.Holo.ActionBar这样的父action bar的样式。
        例如,如果要改变操作栏背景,你可以使用下列样式:
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <!-- 应用程序或activity应用的主题 -->

    <style name="CustomActivityTheme" parent="@android:style/Theme.Holo">

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

         </style>

    <!-- action bar backgrounds 样式-->

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

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

        <item name="android:backgroundStacked">@drawable/ab_background</item>

        <item name="android:backgroundSplit">@drawable/ab_split_background</item>

    </style>

</resources>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值