Как работает MenuItem.SHOW_AS_ACTION_IF_ROOM? - PullRequest
9 голосов
/ 15 января 2012

Начало работы с ActionBar ...

Для MenuItem.SHOW_AS_ACTION_IF_ROOM документация гласит:

Показывать этот элемент как кнопку на панели действий, если система решит, что есть местодля него.

Мой вопрос: как система решает, есть ли место, и могу ли я повлиять / изменить это решение?

В моем случае у меня есть несколько пунктов меню.это было бы уместно для отображения в качестве кнопок действий - если есть достаточно места.На меньших экранах они занимают достаточно места, чтобы сделать заголовок панели действий эллиптическим.В этом случае я бы предпочел, чтобы они перешли в переполнение действий, а не затемняли заголовок.

PS.Я использую ActionBarSherlock и не проверил, действует ли родной ActionBar точно так же.Если нативный ActionBar не позволяет элементам действия «if-room» слишком сильно уменьшать заголовок, тогда круто, я пойду искать ошибку в ActionBarSherlock.

Ответы [ 3 ]

8 голосов
/ 28 января 2012

Согласно официальному руководству по Android Design (http://developer.android.com/design/patterns/actionbar.html):

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

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

ОК, это не было слишком сложно понять, логика в ActionMenuPresenter.java

Похоже, что:

  • функциональные кнопки не могут занимать более половины горизонтального пространства
  • Количество отображаемых кнопок действий также ограничено, в зависимости от ширины экрана (R.integer.abs__max_action_buttons)
  • Числовой предел может быть нарушен, если действия принадлежат одной и той же группе, а ограничение ширины не может - если группа выходит за пределы ширины, вся группа переполняется.
1 голос
/ 15 января 2012

Я пользователь ActionBarSherlock, я могу предложить вам просмотреть источники Wharton для ответа.

Как я понимаю, у него есть его на макете с методом onMeasure, где он проверяет, если заголовок, логотип и менюпредставления элементов могут быть размещены на панели действий, определяя их суммарную ширину.

Вы можете проверить его логику, если я могу доверять моей памяти, в классе BaseMenuPresenter.

...