Удалить заголовок из контекстной панели действий

Я хочу удалить представление, выделенное для заголовка в контекстной панели действий.

Это то, что я хочу удалить

Обратите внимание, что я не хочу устанавливать заголовок; Я хочу, чтобы View полностью исчез. Это сделано для того, чтобы было больше места, чтобы действия можно было отображать в строке меню, а не выбрасывать в дополнительное меню.

Также обратите внимание, что я не хочу устанавливать android:showAsAction="always". Я хочу, чтобы Android сам решал, сколько места для значков. Я просто хочу, чтобы было больше места, удалив пустую область, зарезервированную для заголовка.

ОБНОВЛЕНИЕ

Что я пробовал:

  • ActionMode.setCustomView(null)
  • ActionMode.setTitleOptionalHint(true)
  • ActionMode.setTitle("").

К сожалению, ни один из них не сработал.


ОБНОВЛЕНИЕ 2

Оказывается, мои желаемые результаты невозможно достичь тем способом, которым я пытался. Удаление заголовка не оставит места для дополнительных значков; Android устанавливает жесткие ограничения в зависимости от размера экрана устройства. Если вы хотите добавить в меню больше значков, см. ответ, предоставленный @adneal.

Если у вас действительно есть заголовок (как показано ниже) и вы хотите его удалить, вы можете позвонить ActionMode.setTitle(""), как это предусмотрено @CommonsWare в принятом ответе.

Пример меню с заголовком


person Sean Beach    schedule 23.04.2014    source источник


Ответы (5)


Попробуйте позвонить setCustomView(null) по номеру ActionMode.

Если это не сработает, попробуйте setTitleOptionalHint(true) на ActionMode.

Если это не сработает, попробуйте setTitle("") на ActionMode.

person CommonsWare    schedule 23.04.2014
comment
Я пытался вызвать их после вызова inflater.inflate(R.menu.my_menu, menu); в onPrepareActionMode. Это подходящее место, чтобы попробовать это? - person Sean Beach; 23.04.2014
comment
Это означает, что я добавил эти строки в свой код и запустил приложение, но проблема не устранена. - person Sean Beach; 23.04.2014
comment
@DirtyBeach: onPrepareActionMode() определенно кажется подходящим местом. Извините, что это не сработало. - person CommonsWare; 23.04.2014
comment
Судя по комментариям @adneal, это правильный способ удалить заголовок. К сожалению, это не дало желаемых результатов из-за ограничения по значкам. Следовательно, это правильный ответ. - person Sean Beach; 24.04.2014

Также обратите внимание, что я не хочу устанавливать android:showAsAction="always"

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

Единственный способ переопределить это значение по умолчанию — сделать так, чтобы ваш MenuItem отображался «всегда».

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        mode.setTitle(null);

        for (int i = 0; i < 5; i++) {
            menu.add("Item " + (i + 1)).setIcon(android.R.drawable.sym_def_app_icon)
                    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
        }
        return true;
    }

Результаты

person adneal    schedule 23.04.2014
comment
Хотя это помогает, но не отвечает на вопрос, как удалить View, содержащий заголовок? Я начинаю думать, что на самом деле его может и не быть. Но, как вы указали, Android в основном говорит: мне все равно, есть ли место; вы получаете только две иконки. Смирись с этим. - person Sean Beach; 23.04.2014
comment
Настройте элементы меню так, чтобы они отображались всегда, а затем используйте предоставленный ответ @CommonsWare. Я не упомянул, как удалить заголовок, потому что он уже предоставил практически все возможные решения для этого. - person adneal; 23.04.2014
comment
Это определенно работает; любой значок с атрибутом android:showAsAction="always" принудительно помещается в меню, как показано на вашем снимке экрана. Я надеялся, что удаление заголовка освободит больше места, не делая этого. К сожалению, похоже, что это не так. - person Sean Beach; 24.04.2014
comment
Я надеялся, что удаление заголовка освободит больше места - person Rasel; 02.02.2017

После ответа adneal я столкнулся с проблемой, как поступить с действием. поэтому я нашел это решение проще: по-прежнему использую xml/inflater, но добавляю

 menu.findItem(R.id.whatever).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
person sodesuga nandemoi    schedule 26.06.2015

Я попробовал решения, представленные здесь, и сделал несколько замечаний:

  • Представление для заголовка всегда содержится в иерархии представлений (-> Инспектор макетов из Android Studio). Но оно находится в фоновом режиме и будет переопределено содержимым.
  • setContentView добавляет представление, предоставленное макету (на переднем плане). Таким образом, setContentView(null) не удаляет представление для заголовка. (Все еще отображается в инспекторе макетов)
  • app:showAsAction="always" переопределяется при раздувании макета. Вы можете настроить постоянное отображение 3 элементов, но будут отображаться только 2 элемента.

Но установка .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS) программно после раздувания меню работает.

person Sqrt-1764    schedule 17.01.2017

person    schedule
comment
Это для панели действий в Activity. Я спрашиваю о контекстной панели действий в файле ActionMode. Это разные вещи. - person Sean Beach; 24.04.2014