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 "in
Toolbar, even if you implement
Toolbarindependently, it will be grayed out just by
set Enable`