Ich habe versucht, einige Menüelemente in OptionsMenu unter bestimmten Bedingungen auszublenden, damit sie nicht abgerufen werden können. Deshalb habe ich sie als Memorandum geschrieben
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);
}
Dieses Mal wurde es in Fragment implementiert, daher wird es in Fragment beschrieben Beachten Sie, dass das Optionsmenü nur angezeigt wird, wenn Sie auf der Seite "Aktivität" "setHasOptionsMenu (true)" ausführen.
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="Menü 1"
app:showAsAction="never" />
<item
android:id="@+id/menu_second"
android:orderInCategory="2"
android:title="Menü 2"
app:showAsAction="never" />
</menu>
Setzen Sie app: showAsAction =" never "
, um es im Überlaufmenü zu speichern.
MainFragment.java
@Override
public void onPrepareOptionsMenu(@NonNull Menu menu) {
menu.findItem(R.id.menu_second).setEnabled(isEnable);
}
Wenn Sie "Symbolleiste" nicht in Ihrer Layoutdatei verwenden, können Sie durch Drücken von "setEnable" grau werden. Wenn Sie jedoch "Symbolleiste" verwenden, wird nur "setEnable" nicht ausgegraut. Verwenden Sie Theme, um die Attribute von app: popupTheme
anzugeben
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>
Erstellen Sie einen "Selektor" im "Farb" -Paket, machen Sie den Menütext grau, wenn er "falsch" ist, und ansonsten schwarz.
styles.xml
<style name="AppThemeOverlay.AppBar.Menu" parent="ThemeOverlay.AppCompat.Light">
<item name="android:textColor">@color/menu_item_text</item>
</style>
Erstellen Sie ein Thema mit "Stilen", sodass der Menütext mit dem zuvor erstellten "Selektor" ausgegraut wird
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>
Wenn Sie app: popupTheme =" @ style / AppThemeOverlay.AppBar.Menu "
in Toolbar
ausführen, wird diese nur durch set Enable
abgeblendet, selbst wenn Sie Toolbar
selbst implementiert haben.