Android - держать меню настроек открытым
У меня есть меню параметров в моем приложении Android, и я переопределил методы onCreateOptionsMenu, onOptionsItemSelected и onPrepareOptionsMenu, чтобы немного изменить меню.
Мой вопрос связан с сохранением меню "Параметры" открытым после того, как пользователь щелкнет по пункту меню. По сути, я хотел бы иметь возможность скрывать меню, пока пользователь не нажмет на кнопку меню устройства. После того, как пользователь нажмет эту клавишу, я бы хотел удерживать меню на месте независимо от того, сколько раз пользователь нажимал на пункты меню. Если пользователь хочет скрыть меню "Параметры", ему просто нужно снова нажать кнопку меню устройства.
Поддерживается ли этот тип взаимодействия (или даже рекомендуется). Если это взаимодействие не поддерживается, любые альтернативные предложения приветствуются.
Ура!
Шон
2 ответа
Это не будет возможно с onCreateOptionsMenu и другими методами. Они всегда так поступают.
Но вы можете сделать это по-другому. Но там вы должны запрограммировать все меню самостоятельно. В основном добавьте Меню в файл layout.xml и позвольте ему быть скрытым (видимость = ушел). Затем вы перезаписываете методы onKeyDown. Там вы проверяете, является ли это клавишей меню. если меню еще не открыто да, то вы показываете меню. Если он уже открыт, вы скрываете его.
не должно быть слишком сложно. Хорошо также то, что вы можете заставить меню выглядеть именно так, как вы хотите, а также позволить ему реагировать так, как вы хотите.
Для любого, как я, кто нашел этот вопрос в Google:
Чтобы сохранить меню открытым после выбора пункта, вам нужен этот код:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
item.setChecked(!item.isChecked());
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
item.setActionView(new View(this));
item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return false;
}
});
return false;
}
Важно вернуть false
в onOptionsItemSelected
и методы OnActionExpandListener
Это решение от @MayurGajra. Подробнее здесь: Как удерживать меню переполнения после того, как я его щелкну?