ПРОЧИТАЙТЕ ЭТО
Как уже было сказано, «ручная проверка» — это только вершина айсберга. Он высвечивает меню так быстро, пользователи не видят, что происходит, и это очень нелогично, раздражает и, по сути, является полной чушью. REAL TASK
(поэтому) позволяет пользователю переваривать событие флажка.
Хорошие новости: это можно сделать, и это действительно работает, и вот как вы это делаете. У @TouchBoarder было лучше, поэтому я скопирую его код. затем развивать его.
идея состоит в том, чтобы определить, нажат ли флажок, а затем (и только если он выбран) слегка подавить удаление меню, добавить таймер на 500 мс, а затем закрыть меню, это дает время для запуска анимации «тик» флажка и создает правильное «ощущение»
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_favorite"
android:checkable="true"
android:title="@string/action_favorite"
app:actionViewClass="android.widget.CheckBox"
app:showAsAction="ifRoom|withText" />
</menu>
затем вы делаете этот метод, как обычно, но обязательно добавляете все эти дополнительные удары
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the bottom bar and the top bar (weird)
BottomAppBar bottomBar = findViewById(R.id.bottom_app_bar_help);
Menu bottomMenu = bottomBar.getMenu();
getMenuInflater().inflate(R.menu.bottom_nav_menu, bottomMenu);
for (int i = 0; i < bottomMenu.size(); i++) {
bottomMenu.getItem(i).setOnMenuItemClickListener(item -> {
if (item.getItemId()==R.id.action_favorite){
item.setChecked(!item.isChecked());
// Keep the popup menu open
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
item.setActionView(new View(frmMain.this));
item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
final Handler handler = new Handler();
handler.postDelayed(() -> bottomMenu.close(), 500);
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
final Handler handler = new Handler();
handler.postDelayed(() -> bottomMenu.close(), 500);
return false;
}
});
return false;
}
else {
return onOptionsItemSelected(item);
}
});
}
return true;
}
остальные события меню здесь
public boolean onOptionsItemSelected(MenuItem item) {
// Bottom Bar item click
try {
switch (item.getItemId()) {
case R.id.mnuExit:
MenuClick(ClickType.LOGOUT);
return true;
case R.id.mnuList:
MenuClick(ClickType.LIST);
return true;
default:
return super.onOptionsItemSelected(item);
}
} catch (Exception e) {
e.printStackTrace();
}
return super.onOptionsItemSelected(item);
}
person
Mr Heelis
schedule
30.08.2019