如何删除文本和徽标或在API 8上使用AppCompat在Android ActionBar上添加Overflow?

时间:2013-09-04 00:57:41

标签: android api icons android-actionbar android-appcompat

已经研究过这个死亡,但是找不到答案。

我有一个使用AppCompat的ActionBar。我支持API v7(API v8会这样做)。 ActionBar完全适用于API v11。 API< v11存在从ActionBar中删除图标(以及某个功能)而不提供溢出的问题。大局是我有一个App徽标,一个应用程序标题和3个图标,所有这些都在低端手机的同一个ActionBar中碾压。试着腾出一些空间!

我对2种解决方案中的1种感到满意。之一:

  1. 获取溢出的方法,以便可以从下拉中检索功能。
  2. (首选)从ActionBar中删除图标和文本的方法
  3. 以下是我目前用于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>
    

2 个答案:

答案 0 :(得分:4)

解决了!

使用API​​&lt; v11,你必须删除Style中属性的“android:”元素。例如:

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

使用API​​&gt; = v11

的样式应该是这样的
<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&lt;的设备上应用此图标时,我错过了一些图标。 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的标题和图标,并显示从右到左的所有图标。

答案 1 :(得分:0)

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

中的任何空格