[JAVA] [Android] Menüpunkt im Optionsmenü abgrauen

Überblick

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

Implementierung des Optionsmenüs

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.

Aktualisieren Sie das OptionsMenu-Menü mit onPrepareOptionsMenu

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

Wenn Sie die Symbolleiste verwenden

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.

Referenz

Graues Menü im Tagebuch von Android-Tadao Yamaoka

Recommended Posts

[Android] Menüpunkt im Optionsmenü abgrauen
Hinweise zu Android Studio