Я бы хотел, чтобы все пункты меню, которые не вписывались в панель ActionBar, попадали в меню переполнения (то, которое вызывается из панели действий, а не кнопка меню) даже на устройствах, на которых есть кнопка меню . Это кажется гораздо более интуитивно понятным для пользователей, чем выбрасывание их в отдельный список меню, требующий от пользователя перехода от сенсорного (экранного) взаимодействия к взаимодействию на основе кнопок просто потому, что макет панели действий не помещается на панели.
На эмуляторе я могу установить значение «Аппаратные ключи назад / Домашние ключи» на «нет» и получить этот эффект. Я искал способ сделать это в коде для фактического устройства, которое имеет кнопку меню, но не может точно. Может кто-нибудь помочь мне?
источник
Вы также можете использовать этот небольшой взлом здесь:
Хорошее место, чтобы поместить это был бы
onCreate
-Метод вашего класса Application.Это заставит приложение показать меню переполнения. Кнопка меню по-прежнему будет работать, но откроет меню в правом верхнем углу.
[Править] Так как он появлялся уже несколько раз: этот хак работает только для родного ActionBar, представленного в Android 3.0, а не для ActionBarSherlock. Последний использует свою собственную внутреннюю логику, чтобы решить, показывать ли меню переполнения. Если вы используете ABS, все платформы <4.0 обрабатываются ABS и, следовательно, подчиняются его логике. Хак все равно будет работать на всех устройствах с Android 4.0 или выше (вы можете смело игнорировать Android 3.x, поскольку на самом деле не существует планшетов с кнопкой меню).
Существует специальная тема ForceOverflow, которая заставит меню в АБС, но, по всей видимости, в будущих версиях оно будет удалено из-за сложностей .
источник
Field
выберите этотjava.lang.reflect.Field
;)Я использую, чтобы обойти это, определяя мое меню как это (также с иконкой ActionBarSherlock, используемой в моем примере):
Я признаю, что для этого может потребоваться ручное «управление переполнением» в вашем xml, но я нашел это решение полезным.
Вы также можете заставить устройство использовать кнопку HW, чтобы открыть меню переполнения, в вашей деятельности:
:-)
источник
Если вы используете панель действий из библиотеки поддержки (
android.support.v7.app.ActionBar
), используйте следующее:источник
Этот метод не поддерживается системой разработки для разработчиков Android, но я нашел способ его пройти:
Добавьте это в ваш файл меню XML:
Затем создайте класс с именем AppPickActionProvider и скопируйте в него следующий код:
источник
Ну, я думаю, что Александр Лукас дал (к сожалению) правильный ответ, поэтому я отмечаю его как «правильный». Альтернативный ответ, который я добавляю здесь, состоит в том, чтобы просто указать новым читателям на этот пост в блоге разработчиков Android как довольно полное обсуждение темы с некоторыми конкретными предложениями о том, как обращаться с вашим кодом при переходе с уровня до 11 к новой панели действий.
Я все еще верю, что это была ошибка дизайна, потому что кнопка меню не функционировала как избыточная кнопка «Переполнение действия» в устройствах с включенной кнопкой меню, как лучший способ перенести пользовательский опыт, но его вода под мостом на данном этапе.
источник
Я не уверен, что это то, что вы ищете, но я создал подменю в меню ActionBar и установил его значок в соответствии со значком переполненного меню. Хотя на него не будут автоматически отправляться элементы (т. Е. Вы должны выбирать, что всегда видно, а что всегда переполняется), мне кажется, что этот подход может вам помочь.
источник
В приложении gmail, которое поставляется с предустановленной ICS, кнопка меню отключается, если выбрано несколько элементов. Меню переполнения здесь «принудительно» вызывается с помощью кнопки переполнения вместо кнопки физического меню. Существует сторонняя библиотека под названием ActionBarSherlock, которая позволяет вам «форсировать» меню переполнения. Но это будет работать только на уровне API 14 или ниже (до ICS)
источник
Если вы используете панель инструментов , вы можете показать переполнение на всех версиях и на всех устройствах, я пробовал на некоторых устройствах 2.x, это работает.
источник
Извините, если эта проблема мертва.
Вот что я сделал, чтобы устранить ошибку. Я пошел на макеты и создал два, содержащие панели инструментов. Один из них был макетом для SDK версии 8, а другой - для SDK версии 21. В версии 8 я использовал android.support.v7.widget.Toolbar, в то время как я использовал android.widget.Toolbar на макете SDK 21.
Затем я раздуваю панель инструментов в своей деятельности. Я проверяю SDK, чтобы увидеть, был ли он 21 или выше. Затем я раздуваю соответствующий макет. Это заставит аппаратную кнопку отобразиться на панели инструментов, которую вы на самом деле создали.
источник
Для тех, кто использует новое
Toolbar
:источник