Удалить заголовок из контекстной панели действий
Я хочу удалить представление, выделенное для заголовка в контекстной панели действий.
Обратите внимание, что я не хочу устанавливать заголовок; Я хочу 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)
программно после надувания меню работает.