I tried to gray out some MenuItems in OptionsMenu under certain conditions so that they could not be tapped, so I wrote it as a memorandum.
MainFragment.java
private boolean isEnable = true;
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.menu_item, menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
AppCompatActivity activity = (AppCompatActivity) getActivity();
int id = item.getItemId();
switch (id) {
case R.id.menu_first:
activity.getSupportActionBar().invalidateOptionsMenu();
isEnable = false
return true;
case R.id.menu_second:
return true;
}
return super.onOptionsItemSelected(item);
}
This time it was implemented in Fragment, so it is described in Fragment
Note that the Options Menu will not be displayed unless you do setHasOptionsMenu (true) in ʻActivity`.
menu_item.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_first"
android:orderInCategory="1"
android:title="Menu 1"
app:showAsAction="never" />
<item
android:id="@+id/menu_second"
android:orderInCategory="2"
android:title="Menu 2"
app:showAsAction="never" />
</menu>
Put ʻapp: showAsAction =" never "` to store in the overflow menu
MainFragment.java
@Override
public void onPrepareOptionsMenu(@NonNull Menu menu) {
menu.findItem(R.id.menu_second).setEnabled(isEnable);
}
If you are not using Toolbar in your layout file, you can gray out by just pressing setEnable, but if you are using Toolbar, justsetEnable will not gray out. Use Theme to specify the attributes of ʻapp: popupTheme`
menu_item_text.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="#727272" />
<item android:color="#000000"/>
</selector>
Create a selector in the color package, make the menu text gray if it is false, and black otherwise.
styles.xml
<style name="AppThemeOverlay.AppBar.Menu" parent="ThemeOverlay.AppCompat.Light">
<item name="android:textColor">@color/menu_item_text</item>
</style>
Create a Theme with styles so that the menu text is grayed out by using the selector created earlier
fragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:popupTheme="@style/AppThemeOverlay.AppBar.Menu" />
</LinearLayout>
If you do ʻapp: popupTheme =" @ style / AppThemeOverlay.AppBar.Menu "inToolbar, even if you implement Toolbarindependently, it will be grayed out just byset Enable`