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

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

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

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

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

ОБНОВИТЬ

Вещи, которые я пробовал:

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

К сожалению, ничего из этого не сработало.


ОБНОВЛЕНИЕ 2

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

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

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

5 ответов

Решение

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

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

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

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

Вы должны, если вы хотите более двух кнопок действий в 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;
    }

Результаты

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

 menu.findItem(R.id.whatever).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
@Ovrride
protected void onCreate(Bundle savedInstanceState……

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.prva.xml);

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

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

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

Другие вопросы по тегам