1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. Braesident, 23.01.2018 #1
    Braesident

    Braesident Threadstarter Junior Mitglied

    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.
     
  2. keen, 23.01.2018 #2
    keen

    keen Android-Hilfe.de Mitglied

    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
     
  3. lordzwieback, 23.01.2018 #3
    lordzwieback

    lordzwieback Fortgeschrittenes Mitglied

    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:
    Hierzu ergänzend die Frage: Du rufst den Befehl nicht im OnCreate auf, oder?
     
  4. Braesident, 10.02.2018 #4
    Braesident

    Braesident Threadstarter Junior Mitglied

    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.

    [​IMG]
    [​IMG]
    ! 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.
     
  5. markus.tullius, 01.03.2018 #5
    markus.tullius

    markus.tullius Android-Lexikon

    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).
     
  6. Braesident, 04.03.2018 #6
    Braesident

    Braesident Threadstarter Junior Mitglied

    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: 04.03.2018
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Hintergrundprozess funktioniert nicht Android App Entwicklung 29.05.2018
Bluetooth Kommunikation funktioniert ab Android 7 nicht mehr Android App Entwicklung 25.01.2018
[OFFEN] Webview Cache funktioniert nicht Android App Entwicklung 31.10.2017
Du betrachtest das Thema "openOptionsMenu() funktioniert nicht" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.