Android Studio环境下ActionBar的使用教程以及如何解决遇到的问题

声明:
关于ActionBar的使用教程,强烈推荐阁下参考 郭霖大神的两篇博客
Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
这两篇博文几乎涵盖了ActionBar 90%的使用用法.

顺便说一下,郭神的博客是基于eclipse环境开发的,如果您现在使用的是eclipse(这都21世纪了,估计用eclipse的很少,eclipse目前仅有的一点优势可能体现在jni开发上了)的话,参照上述两篇博客学习应该没什么问题.我用的开发环境是as,因此我下面要说的问题,应该是使用 as开发的用户才有可能遇到的问题.

最终实现效果:
效果图
按照郭神博客,该有的效果都实现了.

但是在AS环境下的实现过程中遇到了两个问题.由于网上资料很少,特此记录下.
1.ActionBar返回箭头和logo图标间距过大
2.ActionBar中的action按钮只显示在overflow(最右边3个点)里

先看问题效果图:
这里写图片描述

能忍么?我不能忍.上网找答案,大部分给的答案都是ToolBar的解决方案.google官方推荐使用ToolBar来代替ActionBar,ActionBar能实现的效果ToolBar都能实现.如果是ToolBar中出现这种问题,只需要在toolbar.xml布局文件中添加

app:contentInsetStartWithNavigation="0dp"

即可.但是要知道ActionBar可不存在所谓的布局文件(当然了,这里不包括自定义ActionBar样式)

造成这种问题的原因:
AS中的活动默认继承了AppcompatActivity,而Eclipse中默认继承了Activity.至于AppcompatActivity和Activity的区别,可参考Android中Activity和AppcompatActivity的区别,这里不在赘述. Activity的继承的父类不同,主题和引用的方式也不同,因此只需将as中的继承的父类改为Activity即可

更改前:
AppcompatActivity:   android:theme=”@style/AppTheme”>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="contentInsetStart">0dp</item>
        <item name="contentInsetStartWithNavigation">0dp</item>

    </style>


Activity:    android:theme=”@android:style/Theme.Holo.Light.DarkActionBar”>

<!--todo @android:style/Theme.Holo.Light范围更广-->
    <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">

        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <!--todo 改变tab的字体颜色-->
        <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
        <!--todo 改变tab指示线的颜色-->
        <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>
    </style>

    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <!--todo 调整actionbar的背景色-->
        <item name="android:background">#f4842d</item>

        <!--todo 调整actionbar tab的背景色-->
        <item name="android:backgroundStacked">#d27026</item>

        <!--todo 改变actionbar的字体(图标旁边的,不是tab中的字体)的颜色-->
        <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>

    </style>

    <style name="MyActionBarTitleText" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">#fff</item>
    </style>

    <style name="MyActionBarTabText"
        parent="@android:style/Widget.Holo.ActionBar.TabText">
        <item name="android:textColor">#fff</item>
    </style>

    <style name="MyActionBarTabs" parent="@android:style/Widget.Holo.ActionBar.TabView">
        <item name="android:background">@drawable/actionbar_tab_indicator</item>
    </style>

更改后的style.xml文件中对于ActionBar中的标题颜色, ActionBar背景色, 以及tab背景色, 还有指示器的样式的实现都做了详细注释,相信只要你看了郭神的上述两篇博文,自然会明白的.

改变引用主题之后,最关键的是导包,需要原来的v7包换成v4包.
直接上图吧
这里写图片描述
至此,完结,如有疑问请留言.

附上ActionBar的测试Demo,如有需要请移步下载.
https://download.csdn.net/download/zhangqunshuai/10467672

猜你喜欢

转载自blog.csdn.net/zhangqunshuai/article/details/80622559
今日推荐