0

已经研究到死了,只是找不到答案。

我有一个使用 AppCompat 的 ActionBar。我最多支持 API v7(API v8 可以)。ActionBar 从 API v11 完美运行。API < v11 的问题是在不提供溢出的情况下从 ActionBar 中删除图标(因此也是一项功能)。大局是我有一个应用程序徽标、一个应用程序标题和 3 个图标,它们都挤进了低端手机上的同一个操作栏中。试图腾出一些空间!

我会对 2 个解决方案中的 1 个感到满意。任何一个:

  1. 一种获取溢出的方法,以便可以从下拉菜单中检索功能。
  2. (首选)从ActionBar中删除图标和文本的方法

以下是我当前用于 API 11+ 的 XML:

<resources>

    <!--
        Base application theme for API 11+. This theme completely replaces
        AppBaseTheme from res/values/styles.xml on API 11+ devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/LiteActionBarStyle</item>
        <item name="actionBarStyle">@style/LiteActionBarStyle</item>
    </style>

    <style name="LiteActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:displayOptions"></item>
    </style>

</resources>

具体来说:

<item name="android:displayOptions"></item>

这是 API v11 之前不可用的属性。

这是我到目前为止的位置:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="actionBarStyle">@style/LiteActionBarStyle</item>
    </style>

    <style name="LiteActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"></style>

</resources>

v11 之前的 API 有什么替代方案?

编辑:

带有透明度建议的更新样式:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="actionBarStyle">@style/LiteActionBarStyle</item>
    </style>

    <style name="LiteActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:icon">@android:color/transparent</item>
    </style>

</resources>
4

2 回答 2

4

解决了!

使用 API < v11 时,您必须删除 Style 中属性的“android:”元素。例如:

<style name="LiteActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="displayOptions"></item>
    </style>

这就是 API >= v11 在 Styles 中的外观

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/LiteActionBarStyle</item>
        <item name="actionBarStyle">@style/LiteActionBarStyle</item>
    </style>

    <style name="LiteActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:displayOptions"></item>
    </style>

此外,当我在 API < v11 的设备上应用它时,我丢失了一些图标。我不得不将图标更改为始终显示:

<item
        android:id="@+id/actionInvertShake"
        MyApp:showAsAction="always"
        android:contentDescription="@string/shakeChangeContentDescription"
        android:icon="@drawable/shake"
        android:title="@string/shakeOption"/>

请注意,命名空间是“MyApp”而不是“android”

这会从 ActionBar 中删除 App 的 Title 和 Icon,并从右到左显示所有图标。

于 2013-09-04T11:55:33.717 回答
0

设置<item name="android:icon">@android:color/transparent</item> 它不会占用ActionBar.

于 2013-09-04T01:34:28.283 回答