使用我的Lollipop主题(在棒棒糖上)!

时间:2015-02-11 21:50:51

标签: android android-5.0-lollipop android-support-library

使用新的Lollipop工具让我的应用看起来非常不错。我认为向后兼容性很重要,所以我将所有Fragments,actionBar导入切换到支持库。现在(可以理解)我不能使用我的棒棒糖主题。

有没有办法为不同的主题使用不同的操作栏?我试图将支持ActionBar转换为新的支持,但似乎不允许这样做。

我的问题在于以下内容(来自v21 docs)

  
    

您的所有活动都必须从ActionBarActivity扩展而来     从v4支持库中的FragmentActivity扩展,所以你可以     继续使用片段。你的所有主题(想要一个动作     Bar / Toolbar)必须从Theme.AppCompat继承。有变种     可用,包括Light和NoActionBar。当膨胀任何东西时     显示在操作栏上(例如SpinnerAdapter列表     在工具栏中导航),确保使用操作栏的主题     上下文,通过getSupportActionBar()。getThemedContext()检索。您     必须使用MenuItemCompat中的静态方法来处理任何与动作相关的方法     调用MenuItem。

  

所以通过调用getsupportActionBar,我无法使用我的Holo主题:

 <resources>
<!-- Base application theme. -->
<style name="appTheme" parent="android:Theme.Holo.Light.DarkActionBar">

</style>


<style name="MyActionBar"
    parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:background">@color/blue_semi_transparent</item>
</style>
</resources>

由于某种原因,操作栏会丢失其上的按钮,并进入下拉菜单,操作栏中不再显示应用程序图标。 我真的不是这方面的专家,只是开始在棒棒糖上开发,所以非常感谢建议。

1 个答案:

答案 0 :(得分:2)

AppCompat(即ActionBarActivity)使用Material color palette定义整个应用中的默认着色。在您的情况下,您需要使用colorPrimary作为操作栏颜色:

<style name="appTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/blue_semi_transparent</item>
</style>

请注意,您还应该为状态栏着色提供colorPrimaryDark(相同颜色的较暗版本)。

根据部分过时的Action Bar training,AppCompat还会为您的菜单项使用应用程序命名空间属性(因为{11}之前的showAsAction不存在):

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto" >
    <item android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/action_search"
        app:showAsAction="ifRoom"  />
  ...
</menu>

根据Toolbar documentation(这是Material主题和AppCompat中的默认行为):

  

在现代Android UI中,开发人员应该更多地依赖于工具栏的视觉上不同的颜色方案而不是应用程序图标。 不鼓励在API 21设备和更新版本上使用应用程序图标和标题作为标准布局。

因此,您注意到操作栏上没有显示应用程序图标是预期的行为。