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>
Ответы
Ответ 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>