openOptionsMenu() funktioniert nicht

B

Braesident

Ambitioniertes Mitglied
1
Hallo mal wieder,

in meiner App verwende ich die openOptionsMenu() Funktion die auch auf allen bisherigen getesteten Geräten funktionierte. Darunter ein Huawei P9 mit Android 7.0.

Jetzt installierte ich die App auf einem Samsung Tab S3 mit Android 7.0.
Hier tritt nun folgendes auf: in einem normalen Betrieb der App wird kein Menü angezeigt. In der Logcat gibt es beim Auslösen keine Fehlermeldung und auch ein hinterlegter Log zu beginn von onCreateOptionsmenu wird nicht geloggt. Also allem anschein nach nicht aufgerufen.

Teile ich aber nun den Screen des Tabs um 2 Apps anzuzeigen, erscheint das Menu nach einem Aufruf. Hat jemand eine Idee woran es liegen könnte. Code-schnipsel die von bedeutung sein könnten liefer ich gerne nach.
 
Hallo,

hast du schon mal versucht eine zweite App zu erstellen, die nur genau das tut, was du gerade ausprobieren möchtest? Also nur eine App, bei der beim Starten das Menü geöffnet wird (wenn ich dich richtig verstanden habe). Laut Docu wird openOptionsMenu() doch nur verwendet, wenn ich ein Menü , ohne Zutun des Users, öffnen will.
Kann es sein, dass die Funktion 'openOptionsMenu' aufgerufen wird bevor das Menu initialisiert wurde?

vielleicht interessante links:: Menus | Android Developers oder unter Activity | Android Developers
 
Moin,

ich habe den Befehl selbst noch nie benutzt, hab mich aber gerade mal ein wenig umgeschaut zu dem Thema. Wann rufst du diesen Befehl denn auf? Beim Klick auf einen Button o.Ä. ?

EDIT:
keen schrieb:
Kann es sein, dass die Funktion 'openOptionsMenu' aufgerufen wird bevor das Menu initialisiert wurde?
Hierzu ergänzend die Frage: Du rufst den Befehl nicht im OnCreate auf, oder?
 
Hallo, erstmal danke für Antworten/Fragen und Entschuldigung für die lange Pause meinerseits.

Also ich verwende diesen Befehl in 2 verschiedenen Situationen:

1. Meine App besitzt ein Fab-Button über dessen Menüeintrag 'Mehr' das Optionsmenü aufgerufen wird. Am Ende der Codeauszüge ist zu sehen das die Funktion im Grunde nur aufgerufen wird wenn auf ein Button geklickt wird.

7vuVFwC.png

mPXeyiG.png
! 3er Punkte sind nur hier und ersetzen Codeteile die im original vorhanden sind
layout.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    ...

</LinearLayout>

fab.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" >

    <data>
        <variable
            name="FabHandler"
            type="com. ... .MeineActivity.FabHandler" />
    </data>

    <!-- Bis hier: Layout und data muss gesetzt werden um DataBinding  zu nutzen -->

    <android.support.design.widget.CoordinatorLayout android:id="@+id/coordinatorLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:descendantFocusability="beforeDescendants"
        android:focusableInTouchMode="true"
        tools:context="com. ... .MeineActivity" >

        <include layout="@layout/layout"/>

        <android.support.constraint.ConstraintLayout android:id="@+id/constrainLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <!-- Base Button -->
            <android.support.design.widget.FloatingActionButton android:id="@+id/baseButton"
                android:layout_width="wrap_content"
                ...
                android:onClick="@{FabHandler::onBaseFabClick}"
                android:src="@drawable/ic_menu_moreoverflow_normal_holo_dark"
                android:tint="@android:color/background_light"
                app:backgroundTint="@color/colorPrimary"
                app:fabSize="normal"
                app:layout_constraintRight_toRightOf="@+id/constrainLayout"
                app:layout_constraintTop_toTopOf="@+id/constrainLayout" />

                ...

            <LinearLayout android:id="@+id/id_menuMoreLayout"
                android:layout_width="wrap_content"
                ...
                android:visibility="invisible"
                app:layout_constraintTop_toBottomOf="@+id/id_menuPictureLayout"
                app:layout_constraintRight_toRightOf="@+id/constrainLayout">

                <TextView android:id="@+id/id_tvMore"
                    android:layout_width="wrap_content"
                    ...
                    android:typeface="normal" />

                <android.support.design.widget.FloatingActionButton android:id="@+id/id_btnMore"
                    android:layout_width="wrap_content"
                    ...
                    android:onClick="@{FabHandler::onClickMore}"
                    android:tint="@android:color/black"
                    app:backgroundTint="@android:color/darker_gray"
                    app:fabSize="mini"
                    app:rippleColor="@android:color/holo_red_dark"
                    app:srcCompat="@android:drawable/btn_star" />

            </LinearLayout>

        </android.support.constraint.ConstraintLayout>

    </android.support.design.widget.CoordinatorLayout>

</layout>

MeineActivity.java:
Code:
public class ZettelActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // FAB Menü
        binding = DataBindingUtil.setContentView(this, R.layout.fab);
        binding.setFabHandler(new FabHandler());
    }

    public class FabHandler {

        public void onClickMore(View view) {

            collapseFabMenu();
            openOptionsMenu();
        }
    }

}

2. Ich habe eine Activity mit SurfaceView. Hier kann auf Vollbild gezeichnet werden. Es gibt keine Buttons außer die des Smartphone. Tippt der User nun auf z.B. Zurück, so wird die Funktion aufgerufen.
Code:
    @Override
    public void onBackPressed() {
        openOptionsMenu();
    }

Wie gesagt, bisher hat auch alles auf verschiedenen Geräten funktioniert. Unter anderem auch ein kleineres Samsung Tab als das oben genannte.

Leider hatte ich noch keine Zeit eine 2.App zu erstellen mit nur dieser einen Funktion.
 
Nachfrage:
Soweit ich sehe, wird das Menu oberhalb der Navigation Bar eingezeichnet. Normalerweise wird es mittig anzeigt. Habt ihr das Layout bzw den Style angepasst?

Dann würde ich mich nicht wundern, wenn das Menu im nicht sichtbaren Bereich gezeichnet wird (Samsung und andere Hersteller passen gerne die Standartelemente an).
 
Hi markus.tullius,

Also das Layout für den ersteren Fall hab ich oben hinterlegt. Ansonsten haben wir im Manifest nur der Application dem Theme ein Style zugewiesen (@Style/AppTheme).
Der Style ist:
Code:
values\styles.xml
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:panelBackground">@color/colorPrimary</item>
        <item name="android:panelColorForeground">@android:color/white</item>
    </style>

v21\styles.xml
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
       <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:panelBackground">@color/colorPrimary</item>
        <item name="android:panelColorForeground">@android:color/white</item>
        <item name="android:navigationBarColor">@color/colorPrimaryDark</item>
    </style>

Ansonsten gibt es erstmal eine gefrickelte Lösung mit einem nicht sichtbaren Button an den ich ein Popup Menü gebunden habe. Und im zweiten Fall mit dem Surface View müssen wir leider eine ActionBar einblenden die den Menü Button anzeigt. (Hier sollte ja nur ein Menü erscheinen wenn auf zurück geklickt wird)

Edit: Mit der ActionBar funktioniert auch das openOptionsMenu() bei einem onBackPressed()
 
Zuletzt bearbeitet:

Ähnliche Themen

SaniMatthias
Antworten
19
Aufrufe
1.005
swa00
swa00
O
Antworten
15
Aufrufe
3.023
ORHUX
O
K
Antworten
3
Aufrufe
1.180
Kapikalaani
K
Zurück
Oben Unten