【问题标题】:How to use the Holo.Light theme but have the ActionBar use Holo withouth ICS?如何使用 Holo.Light 主题但让 ActionBar 在没有 ICS 的情况下使用 Hulu?
【发布时间】:2017-03-13 15:35:52
【问题描述】:

我想要一个深色的 ActionBar,但让应用程序的其余部分使用 Holo.Light 主题。我知道 ICS/4.0 中有一个 Theme.Holo.Light.DarkActionBar 主题,但我希望它也能在 Honeycomb/3.0+ 中工作。

目前,我使用的是深色 Holo 主题,而对于我的其余组件,我使用的是 ContextThemeWrapper。但这是很多工作,很容易导致错误。

这可能吗?

【问题讨论】:

    标签: android themes android-3.0-honeycomb android-actionbar


    【解决方案1】:

    创建自定义样式并将 Parent 样式设置为 holo light 主题,但将 ActionBar 设置为普通 Holo。

    一个类似这样的 xml 文件应该可以完成这项工作(只是出于我的记忆):

    <style name="appstyle0" parent="android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@android:style/Widget.Holo.ActionBar</item>
    </style>
    

    然后将您的 AndroidManifest.xml 中的 appstyle0 设置为样式,并且在您的所有活动中都是全息光主题,但操作栏样式是全息黑暗。

    编辑: 我检查了为什么我的第一个答案不起作用。

    <style name="Widget.Holo.Light.ActionBar" parent="Widget.Holo.ActionBar">
        <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title</item>
        <item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle</item>
        <item name="android:background">@android:drawable/ab_transparent_light_holo</item>
        <item name="android:backgroundStacked">@android:drawable/ab_stacked_transparent_light_holo</item>
        <item name="android:backgroundSplit">@android:drawable/ab_bottom_transparent_light_holo</item>
        <item name="android:homeAsUpIndicator">@android:drawable/ic_ab_back_holo_light</item>
        <item name="android:progressBarStyle">@android:style/Widget.Holo.Light.ProgressBar.Horizontal</item>
        <item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.Light.ProgressBar</item>
    </style>
    

    操作栏在styles.xml 中定义,其属性通常由主题设置。 首先BG是透明的,所以你应该使用“Widget.Holo.Light.ActionBar.Solid”作为父级。 然后你必须将不同的项目一一设置为黑暗主题。 以titleTextStyle为例:

    <style name="TextAppearance.Holo.Widget.ActionBar.Title.Own"
           parent="TextAppearance.Holo.Widget.ActionBar.Title">
        <item name="android:textColor">@android:color/primary_text_holo_dark</item>
        <item name="android:textColorHighlight">@android:color/highlighted_text_holo_dark</item>
        <item name="android:textColorHint">@android:color/hint_foreground_holo_dark</item>
        <item name="android:textColorLink">@android:color/holo_blue_light</item>
    </style>
    

    现在设置为。

    <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Own</item>
    

    使用上面的 xml 属性像这样继续。

    在styles.xml 和themes.xml 中查找所有相关属性以查找参数。 很抱歉,但根据我所看到的,我想没有简单的方法......

    【讨论】:

    • 对我不起作用。例如:&lt;style name="video2brainTheme" parent="@android:style/Theme.Holo.Light"&gt; &lt;item name="android:windowBackground"&gt;@color/background_color&lt;/item&gt; &lt;item name="android:actionBarStyle"&gt;@style/CustomActionBarStyle&lt;/item&gt; &lt;/style&gt; &lt;style name="CustomActionBarStyle" parent="android:Widget.Holo.ActionBar"&gt; &lt;item name="android:paddingLeft"&gt;32dp&lt;/item&gt; &lt;/style&gt; 这给了我 paddingLeft 但不会将深色 Holo 主题应用于操作栏 - 它仍然是浅色主题。
    • 提到的drawables不是公开的,sit如何为你工作?
    【解决方案2】:

    当我想在操作栏中放置自定义视图时遇到了类似的问题。我想要一个深色的操作栏,而应用程序的其余部分保持浅色。更具体地说,我在操作栏中有微调器。

    首先你的主题应该扩展

    <style name="MyTheme.Light" parent="android:Theme.Holo.Light.DarkActionBar">
    

    接下来,在您的活动中,使用getActionBar().getThemedContext() 作为扩大您的视图的上下文。在我的例子中,它是我传递给我的微调器阵列适配器的。

    非常适合我。

    【讨论】:

      【解决方案3】:

      发现这很容易...... 100% 有效

      将以下行添加到 Assemblyinfo.cs

      [assembly: Application(Theme = "@android:style/Theme.Material.Light.DarkActionBar")]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        相关资源
        最近更新 更多