Как удалить текст и логотип ИЛИ добавить Overflow на Android ActionBar с помощью AppCompat в API 8?

Изучили это до смерти и просто не можете найти ответ.

У меня есть ActionBar, использующий AppCompat. Я поддерживаю API до версии 7 (подойдет API версии 8). ActionBar отлично работает с API v11. API ‹ v11 имеет проблему удаления значка (и, следовательно, функции) из панели действий без предоставления переполнения. Общая картина заключается в том, что у меня есть логотип приложения, название приложения и 3 значка, которые помещаются в одну и ту же панель действий на бюджетном телефоне. Пытаюсь освободить место!

Я был бы доволен 1 из 2 решений. Либо:

  1. Метод получения переполнения, чтобы функциональность можно было получить из раскрывающегося списка.
  2. (Предпочтительно) Метод удаления значка и текста из панели действий.

Ниже приведен мой текущий XML для API 11+:

<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>

Какова альтернатива API до версии 11?

ИЗМЕНИТЬ:

Обновленный стиль с предложением прозрачности:

<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>

person BigTobster    schedule 04.09.2013    source источник
comment
Вы можете попробовать сделать свой логотип прозрачным, если не удалить.   -  person Shobhit Puri    schedule 04.09.2013
comment
Я мог бы попробовать это, но не будет ли это занимать то же место? Мне нужно немного дополнительного места для отображения 3 значков, поэтому прозрачность не может быть ответом. Как это делается? Я мог бы попробовать...   -  person BigTobster    schedule 04.09.2013


Ответы (2)


Решил!

При работе с API ‹ v11 необходимо удалить элемент «android:» атрибута в Style. Например:

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

Вот как это должно выглядеть в стилях с API >= 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 ‹ v11. Мне пришлось изменить значки на отображение всегда:

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

Обратите внимание, что пространство имен — «MyApp», а не «android».

Это удаляет заголовок и значок приложения из панели действий и отображает все значки справа налево.

person BigTobster    schedule 04.09.2013

Установите <item name="android:icon">@android:color/transparent</item> Он не будет занимать место в ActionBar.

person nedaRM    schedule 04.09.2013
comment
К сожалению, это также не работает в API v11. Я попробовал это на более новом устройстве, и это именно то, что я ищу. На более старом устройстве это не имеет никакого эффекта. Eclipse в любом случае не жалуется. Я разместил свой код выше. Я делаю что-то неправильно? - person BigTobster; 04.09.2013
comment
неправильно, если сделать значок прозрачным, он все равно будет занимать немного места (по крайней мере, при использовании AppCompat). использовать окончательный View homeIcon = findViewById(android.R.id.home); ((Просмотр) homeIcon.getParent()).setVisibility(View.GONE); на самом деле скрыть это - person martyglaubitz; 13.06.2014