1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Grundlagen: Optionsmenü

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von wulliwu, 04.09.2010.

  1. wulliwu, 04.09.2010 #1
    wulliwu

    wulliwu Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    04.09.2010
    Hallo Community,

    ich habe ein richtiges Anfängerproblem:

    Ist es wohl nicht! Denn was ich auch treibe, die override-funktion

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
    return super.onCreateOptionsMenu(menu);
    }

    wird nicht aufgerufen? Ist das OptionsMenu nicht automatisch Bestandteil einer Activity? Muß man ein OptionsMenu in einer xml-Datei deklarieren?

    Danke für Eure Antworten!

    Viele Grüße
     
    Zuletzt bearbeitet: 04.09.2010
  2. FelixL, 05.09.2010 #2
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Willkommen im Forum!

    Woher weißt du das die Funktion nicht aufgerufen wird?
    Hast du mal das versucht:

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
    Log.i("wulliwus App","onCreateOptionsMenu aufgerufen")
    return super.onCreateOptionsMenu(menu);
    }

    Im Logcat sollte das dann auftauchen.
    Ansonsten kann ich dir dieses kostenlose Buch empfehlen:
    dpunkt.verlag | E-Books
    Da sind die Options-Menü-Sachen gut erklärt.

    Beispielcode:
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    boolean result = super.onCreateOptionsMenu(menu);
    menu.add(0, ABSCHICKEN_ID, "Melden");
    return result;
    }

    Damit hast du schon mal einen sichtbaren Menüeintrag hinzugefügt. Wenn du draufklickst passiert aber noch nichts. Wenn du wissen willst wie das dann geht-->Buch runterladen, Seite 27 des pdfs bzw Seite 11 des Buches und folgende. Außerdem Kapitel 5.4
     
    Zuletzt bearbeitet: 05.09.2010
  3. Fr4gg0r, 05.09.2010 #3
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Zusätzlich:
    Wenn du onKeyDown überschreibst und true zurückgibst, ist es logisch dass sie nicht aufgerufen wird, wenn du die Menü Taste drückst.
    True sagt dem System nämlich, du hast das Event gehandlet und kein anderer muss das Event noch handlen.
    Also entweder false zurückgeben oder nicht überschreiben. ;)
     
    jannux bedankt sich.
  4. FelixL, 05.09.2010 #4
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Wie kommst du jetzt auf onKeyDown? ^^

    Außerdem:
    Oder überschreiben, das machen was du willst, und dann true zurückgeben, wenn es anscheinend funktioniert hat. So wie im Beispielcode :p
     
  5. Fr4gg0r, 05.09.2010 #5
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Wenn du onKeyDown überschreibst, und im Falle vom KeyEvent.KEYCODE_MENU
    true zurückgibst, wird onCreateOptionsMenu ja wohl nicht aufgerufen. oO
     
  6. FelixL, 05.09.2010 #6
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Ja, aber danach fragt er ja nicht, oder? :p
    Er überschreibt ja nur onCreateOptionsMenu.

    An und für sich hast du aber natürlich recht.
     
  7. Fr4gg0r, 05.09.2010 #7
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Hat er gesagt dass er es nicht überschreibt? :p
    Ich nehme mal an seine App besteht nicht nur aus dem oben geposteten Code :lol:

    Wollte nur mögliche Fehlerquellen von vornerein ausschließen.:ohmy:
     
  8. wulliwu, 05.09.2010 #8
    wulliwu

    wulliwu Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    04.09.2010
    Vielen Dank für die Anregungen! Mittlerweile bin ich selbst drauf gekommen, woran es gelegen hat: Man muß natürlich auch die Menütaste drücken! (Anfänger ;))) )
     
  9. FelixL, 05.09.2010 #9
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Natürlich auch nicht schlecht :-D
     
  10. the_alien, 06.09.2010 #10
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    WTF? :thumbsup:
     
  11. v Ralle v, 06.09.2010 #11
    v Ralle v

    v Ralle v Android-Lexikon

    Beiträge:
    913
    Erhaltene Danke:
    199
    Registriert seit:
    27.08.2010
    Dieser Thread hat mir ein Grinsen am Montag Morgen beschert, sehr gut :)
     
  12. pyretta, 21.02.2011 #12
    pyretta

    pyretta Android-Hilfe.de Mitglied

    Beiträge:
    95
    Erhaltene Danke:
    1
    Registriert seit:
    24.01.2011
    Hallo zusammen, :smile:

    ich habe auch ein Optionsmenu gebastelt. Das funktioniert auch wirklich wunderbar, wenn man auf den Menu-Button des Handys drückt.

    Jetzt dachte ich (auch aufgrund dieses Threads) dass man dem User noch die Möglichkeit geben sollte, mit einem Button in der Activity selbst das Optionsmenu aufrufen zu können. So könnte gewährleistet werden, dass diese Option nicht übersehen wird.

    Geht das denn überhaupt?

    Ich habe das Optionsmenu so gebastelt:

    Code:
    @Override
        public boolean onCreateOptionsMenu(Menu menu){
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
        }
           
           @Override
           public boolean onOptionsItemSelected(MenuItem item) {
               switch (item.getItemId()){
               case R.id.tipps:
                Intent tipps = new Intent(this, Tipps.class);
                startActivity(tipps);
                   break;
               case R.id.hinweis:
                Intent hinweis = new Intent(this, Hinweis.class);
                startActivity(hinweis);
                   break;
               case R.id.sonstiges:
                Intent sonstiges = new Intent(this, Sonstiges.class);
                startActivity(sonstiges);
                   break;
      
               } return true;
           }
    
    Dann dachte ich, bastel ich einfach einen Button der dieses Menü aufrufen kann, zusätzlich zu dem Menu-Button des Handys.

    Code:
           public void menuButton (final View view, Menu menu){
                switch (view.getId()){
                case R.id.bt_menu:
                    onCreateOptionsMenu(menu);    
                    break;
                }
                }
    
    Das "onCreateOptionsMenu(menu);" wird ja hier "public boolean onCreateOptionsMenu(Menu menu){...}" deklariert oder? Dann müsste das doch so gehn?

    Wenn ich aber den Button drück dann kommt das unschöne Fensterchen "Forced Close".

    Ich hab leider nix zu diesem Thema im Netz gefunden.

    Könnt Ihr mir helfen?

    Vielen Dank im Voraus.

    Liebe Grüße,
    pyretta


    EDIT:

    Oder könnt Ihr mir sagen wie so ein Menü genannt wird wie in dem Dateianhang gezeigt wird? Dann kann ich mal danach im Netz suchen. Das wäre fast schon besser als mit einem Button.

    Also, das Menü, das mit dem "Köpfchen" schon unten am Displayrand rausschaut. Wenn man dann das Menüköpfchen hochzieht dann erscheint das eigentliche Menü.

    Ich hoffe Ihr versteht überhaupt was ich meine...
     

    Anhänge:

    Zuletzt bearbeitet: 21.02.2011
  13. FelixL, 21.02.2011 #13
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    public void menuButton (final View view, Menu menu){

    In der Zeile müsste der Funktion ja ein Menu übergeben werden. Ich gehe mal davon aus das das in deinem OnClickListener drin steht, und da aber kein Menu übergeben wird. Das wäre der erste Fehler. Der zweite Fehler ist der Aufruf der falschen Funktion.


    Beispielcode wie es funktionieren müsste:

    Code:
        //@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            final Button button1 = (Button) findViewById(R.id.button_id_1);
            final Button button2 = (Button) findViewById(R.id.button_id_2);
    
            button1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
            	openOptionsMenu();
            	}
            });
        
            button2.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
            	closeOptionsMenu();
            }
        });
        }
    
    Du kannst dann ganz normal in public boolean onCreateOptionsMenu (Menu menu) dein Menü befüllen, wie du es jetzt auch schon machst.


    Edit: Editieren während ich schreibe ist fies :D
    Dazu kann ich aber nichts sagen. Musst du wahrscheinlich selbst bauen. Andere Möglichkeit wäre ein so gestylter Button der automatisch hoch rutscht wenn das Menü hoch kommt. Weiß aber wie gesagt nicht wie das geht.
     
    Zuletzt bearbeitet: 21.02.2011
    pyretta bedankt sich.
  14. Fr4gg0r, 21.02.2011 #14
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Zumindest als seitliche "Reinrutschleisten" könnteste vorgefertigten Code nehmen. Gibts auf Google Code.. findeste irgendwo auf anddev.org.
    Ansonsten heißtes selber schreiben...
    Hier ist der link
    http://code.google.com/p/mobile-anarchy-widgets/

    Edit: Anscheinend gehts auch vertikal.. kannst ja mal dein Glück dort versuchen ;)
     
    Zuletzt bearbeitet: 21.02.2011
    pyretta bedankt sich.
  15. FelixL, 21.02.2011 #15
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Zuletzt bearbeitet: 21.02.2011
    pyretta bedankt sich.
  16. Fr4gg0r, 21.02.2011 #16
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    laaaaaaaaaaangweilig :biggrin:
     
  17. FelixL, 21.02.2011 #17
    FelixL

    FelixL Ehrenmitglied

    Beiträge:
    4,855
    Erhaltene Danke:
    754
    Registriert seit:
    26.11.2009
    Phone:
    Wileyfox Swift, HTC One M8
    Ne, besser :D
    geht ebenfalls horizontal, dein DockPanel lässt sich aber nur anklicken, nicht schön ziehen und schubsen. Das geht beim SlidingDrawer.
    Aussehen/Bilder sollten bei beiden komplett frei sein, deins kann man aber auch von oben und von links kommen lassen. Aber wer will das schon :p
     
    pyretta bedankt sich.
  18. pyretta, 22.02.2011 #18
    pyretta

    pyretta Android-Hilfe.de Mitglied

    Beiträge:
    95
    Erhaltene Danke:
    1
    Registriert seit:
    24.01.2011
    Boahr Jungs, vielen Dank! :w00t00:

    Werde mich gleich mal mit dem SlidingDrawer vertraut machen. Wäre nie drauf gekommen dass es so heißen könnte.

    Und danke für die Codeberichtigung. Schon wieder was dazugelernt. :smile:

    Und noch sorry für das Editieren während du schriebst.
    (klingt irgendwie wie ein Filmtitel... :blink: - Editieren während du schriebst. Die Fortsetzung von "Während du schliefst". Jetzt neu in Ihrem Kino um die Ecke. :blink: .)
     
  19. pyretta, 22.02.2011 #19
    pyretta

    pyretta Android-Hilfe.de Mitglied

    Beiträge:
    95
    Erhaltene Danke:
    1
    Registriert seit:
    24.01.2011
    Schade, zu früh gefreut...

    Eclipse nimmt beide Versionen nicht an. :huh:
    Also weder SlidingDrawer noch DockPanel.

    Error Log:

    Auszug aus dem Hinweisblock von "Graphical Layout" in der XML-Ansicht:

    Ich verwende Android 2.1 in diesem betreffenden Projekt.
    Habe das "Graphical Layout" auch schon auf 2.3.1 gestellt - ging trotzdem nicht.

    Ich habs auch direkt von der Tutorial-Seite kopiert. Also verschrieben kann ich mich ja nicht haben. Also ich hab die XML und die Activity angepasst wie beschrieben.

    Wirklich schade. Das wäre sowas von genau das was ich mir vorgestellt habe. :unsure:
     
  20. pyretta, 22.02.2011 #20
    pyretta

    pyretta Android-Hilfe.de Mitglied

    Beiträge:
    95
    Erhaltene Danke:
    1
    Registriert seit:
    24.01.2011
    Ich habs nun doch mit dem "Menü"-Button gelöst. Geht ja auch. :smile:

    Ich frage mich jetzt aber, kann man einem Menüpunkt einen zweizeiligen Menütitel geben?

    z.B:

    Multimedia << Haupttitel
    Filme, Spiele, Software, etc. << Untertitel

    Oder geht das gar nicht?
     

Diese Seite empfehlen