Подтвердить что ты не робот

ShowAsAction = "ifRoom" не отображает элемент, даже если есть много места

Я пытаюсь заставить ActionBar работать правильно в моем приложении (и я использую ActionBarSherlock для получения единого интерфейса между Android 2.x и 4.x).

Мне кажется, что android:showAsAction="ifRoom" - это просто большая, жирная ложь. Всякий раз, когда я устанавливаю действие на ifRoom, ALWAYS появляется в меню переполнения, даже если есть PLENTY комнаты. Вот два скриншота из одного и того же эмулятора. Первый показывает ActionBar со всеми параметрами, установленными на always, а второй показывает ActionBar с двумя последними параметрами, установленными на ifRoom. Как вы можете видеть, на снимке экрана было всего лишь PLENTY, потому что все они были показаны на скриншоте always, так почему бы им не показаться во втором, потому что у них есть комната?

enter image description here

enter image description here

Вот мой файл menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/add"
        android:icon="@drawable/ic_menu_btn_add"
        android:showAsAction="always"
        android:title="Add"/>
    <item
        android:id="@+id/calculateNPV"
        android:icon="@drawable/menu_icon_npv"
        android:showAsAction="always"
        android:title="NPV"/>
    <item
        android:id="@+id/calculateIRR"
        android:icon="@drawable/menu_icon_irr"
        android:showAsAction="always"
        android:title="IRR/YR"/>
    <item
        android:id="@+id/send"
        android:icon="@android:drawable/ic_menu_share"
        android:showAsAction="always"
        android:title="@string/share_pdf"/>
    <item
        android:id="@+id/graph"
        android:icon="@drawable/ic_menu_gallery"
        android:showAsAction="ifRoom"
        android:title="@string/view_cashflow_diagram"/>
    <item
        android:id="@+id/deleteReorder"
        android:icon="@drawable/ic_menu_clear_playlist"
        android:showAsAction="ifRoom"
        android:title="@string/delete_reorder_cashflows"/>

</menu>
4b9b3361

Ответ 1

Надеюсь, я не слишком поздно прихожу на вечеринку.

На самом деле это не большая жирная ложь, а небольшой надзор.

Атрибут showAsAction должен быть определен с использованием другого пространства имен "http://schemas.android.com/apk/res-auto"

Поэтому в тэге верхнего меню вы должны указать пространство имен следующим образом xmlns:app="http://schemas.android.com/apk/res-auto"

а затем используйте это, чтобы определить атрибут showAsAction, например app:showAsAction="ifRoom"

Это должно исправить его

Ответ 2

Это потому, что указано максимальное количество элементов, которые должны перейти на панель действий, и кажется, что они 4. Конечно, вы можете заставить их появиться, установив showAsAction: always, но в отношении руководств Google API:

Если вы считаете, что более четырех элементов вашего меню могут быть оправданы в качестве элементов действия, то вам следует внимательно рассмотреть их родственников уровень важности и попытаться установить не более четырех в качестве элементов действия (и сделайте это, используя значение "ifRoom", чтобы позволить системе назад в меню переполнения, когда пространство ограничено на меньших экранах). Даже если пространство доступно на широком экране, вы не должны создавать длинный поток действий, которые загромождают интерфейс и выглядят как на панели инструментов рабочего стола, поэтому сохраните количество элементов действия до минимума.

Кроме того, следующие действия никогда не должны появляться как действие пункты: Настройки, Справка, Обратная связь или аналогичные. Всегда держите их в переполнение меню.

Ответ 3

Чтобы дополнить ответ Michal Z.: Шаблоны страниц руководства по дизайну Android- > Панель действий говорит следующее в главе "Кнопки действий":

http://developer.android.com/design/patterns/actionbar.html

Сколько действий будет соответствовать основной панели действий? Емкость панели действий контролируется следующими правилами:

  • Кнопки действий в основной панели действий могут не занимать более 50% ширины полосы.
  • Кнопки действий на нижних панелях действия могут использовать всю ширину.
  • Ширина экрана в независимых от плотности пикселей (dp) определяет количество элементов, которые будут помещаться в основную панель действий:
    • меньше 360 дп = 2 значка
    • 360-499 dp = 3 значка
    • 500-599 dp = 4 значка
    • 600 dp и больше = 5 значков

Ответ 4

используйте app:showAsAction="always" вместо android:showAsAction="always"

Ответ 5

Использование

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

Ответ 6

Используйте этот код ниже, он всегда будет работать

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
    <item android:id="@+id/menu_share" android:title="Share"
        android:orderInCategory="100" app:showAsAction="ifRoom"
        android:actionProviderClass="android.widget.ShareActionProvider" />
</menu>