it-swarm.com.de

So stellen Sie das Menü in Android auf die Symbolleiste ein

Ich möchte ToolBar anstelle von ActionBar verwenden, aber kein Menü in der Symbolleiste anzeigen !!! Ich möchte ein Menü wie Refresh oder Setting in ActionBar.

 enter image description here

Toolbar.xml-Code:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:minHeight="?attr/actionBarSize"
    app:navigationContentDescription="@string/abc_action_bar_up_description"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:title="Main Page"
    Android:gravity="center"/>

MainPage.Java-Code:

public class MainPage extends AppCompatActivity {
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page);

        toolbar = (Toolbar) findViewById(R.id.main_toolbar);
        setSupportActionBar(toolbar);
        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle("Main Page");
        }
        toolbar.setSubtitle("Test Subtitle");
        toolbar.inflateMenu(R.menu.main_manu);
    }
}

main_menu.xml code: 

<?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_main_setting"
        Android:icon="@drawable/ic_settings"
        Android:orderInCategory="100"
        app:showAsAction="always"
        Android:actionLayout="@layout/toolbar"
        Android:title="Setting" />

    <item
        Android:id="@+id/menu_main_setting2"
        Android:icon="@drawable/ic_settings"
        Android:orderInCategory="200"
        app:showAsAction="always"
        Android:actionLayout="@layout/toolbar"
        Android:title="Setting" />

</menu>

Wie kann dieses Problem behoben und das Menü in Toolbar angezeigt werden? Vielen Dank, meine Lieben <3

51
Dr.NoBody

Überschreiben Sie einfach onCreateOptionsMenu so in Ihrer MainPage.Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}
94
Keyur Lakhani

Sie müssen diesen Code in Ihrer Aktivität überschreiben:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu, this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main2, menu);
    return true;
}

und stell deine Symbolleiste so ein:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
32
Parth Anjaria

SetSupportActionBar (Symbolleiste) nicht verwenden

Ich weiß nicht warum, aber das funktioniert für mich. 

toolbar = (Toolbar) findViewById(R.id.main_toolbar);
toolbar.setSubtitle("Test Subtitle");
toolbar.inflateMenu(R.menu.main_manu);

Für den Menüpunkt klicken Sie auf dies 

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {

            if(item.getItemId()==R.id.item1)
            {
                // do something
            }
            else if(item.getItemId()== R.id.filter)
            {
               // do something
            }
            else{
               // do something
            }

            return false;
        }
    });

Wird den "Warum" -Teil dieser Antwort aktualisieren, wenn ich ein .__ finde. richtige Erklärung.
Gerne helfen, trotzdem :) Frieden.

26
Rohit Singh

Hier ist eine ausführlichere Antwort als Hinweis auf zukünftige Besucher. Normalerweise verwende ich eine Support-Symbolleiste , aber es funktioniert genauso oder so.

 enter image description here

1. Erstellen Sie eine Menü-XML

Dies wird in res/menu/main_menu sein.

  • Klicken Sie mit der rechten Maustaste auf den Ordner res und wählen Sie Neu> Android-Ressourcendatei
  • Geben Sie main_menu als Dateinamen ein.
  • Wählen Sie Menü als Ressourcentyp.

Fügen Sie den folgenden Inhalt als Starter ein.

<?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/action_add"
        Android:icon="@drawable/ic_add"
        app:showAsAction="ifRoom"
        Android:title="Add">
    </item>
    <item
        Android:id="@+id/action_settings"
        app:showAsAction="never"
        Android:title="Settings">
    </item>
</menu>

Sie können mit der rechten Maustaste auf res klicken und Neues Bildelement wählen, um das ic_add-Symbol zu erstellen.

2. Pumpen Sie das Menü auf

Fügen Sie in Ihrer Aktivität die folgende Methode hinzu.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

3. Behandeln Sie Menüklicks

Fügen Sie auch in Ihrer Aktivität die folgende Methode hinzu:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.action_add:
            addSomething();
            return true;
        case R.id.action_settings:
            startSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Lesen Sie weiter

21
Suragch

Ich stimme dieser Antwort zwar zu, da sie weniger Codezeilen enthält und funktioniert:

So stellen Sie das Menü auf die Symbolleiste in Android ein

Mein Vorschlag wäre, jedes Projekt immer mit dem Android Studio Wizard zu starten. In diesem Code finden Sie einige Stile: - 

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

und Verwendung ist:

<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.AppBarOverlay">

<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</Android.support.design.widget.AppBarLayout> 

Da no action bar theme in styles.xml deklariert ist, das auf Main Activity im AndroidManifest.xml angewendet wird, gibt es keine Ausnahmen.

<activity Android:name=".MainActivity" Android:screenOrientation="portrait"
        Android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  1. Die Toolbar ist keine unabhängige Entität, es ist immer ein Kind Ansicht in AppBarLayout das ist wiederum das Kind von CoordinatorLayout.
  2. Der Code zum Erstellen eines Menüs ist der Standardcode seit dem ersten Tag. Dies wiederholt sich in allen Antworten, insbesondere im markierten, aber niemand hat erkannt, was der Unterschied ist.

BEIDE:

Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar);

UND:

So stellen Sie das Menü auf die Symbolleiste in Android ein

WIRD FUNKTIONIEREN.

Happy Coding :-)

1
Abhinav Saxena

Außerdem benötigen Sie diese Option, um für jede Menüoption eine Aktion durchzuführen.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_help:
            Toast.makeText(this, "This is teh option help", Toast.LENGTH_LONG).show();
            break;
        default:
            break;
    }
    return true;
}
1
Liliana J

Überschreiben Sie in Ihrer Aktivität diese Methode. 

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

Dies wird Ihr Menü unten aufblasen:

 <?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_main_setting"
            Android:icon="@drawable/ic_settings"
            Android:orderInCategory="100"
            app:showAsAction="always"
            Android:actionLayout="@layout/toolbar"
            Android:title="Setting" />

        <item
            Android:id="@+id/menu_main_setting2"
            Android:icon="@drawable/ic_settings"
            Android:orderInCategory="200"
            app:showAsAction="always"
            Android:actionLayout="@layout/toolbar"
            Android:title="Setting" />

    </menu>
1
Khemraj

In meinem Fall verwende ich ein AppBarLayout mit einem CollapsingToolbarLayout und das Menü wurde immer vom Bildschirm gescrollt. Ich habe mein Problem gelöst, indem ich Android: actionLayout im XML-Menü auf die ID der Symbolleiste umgestellt habe. Ich hoffe es kann Menschen in der gleichen Situation helfen!

activity_main.xml

<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:fab="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".activities.MainScreenActivity"
    Android:screenOrientation="portrait">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="300dp"
        app:elevation="0dp"
        Android:theme="@style/AppTheme.AppBarOverlay">
        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/collapsingBar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            app:layout_scrollFlags="exitUntilCollapsed|scroll"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleMarginEnd="48dp"
            >
            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                Android:background="?attr/colorPrimary"
                app:elevation="0dp"
                app:popupTheme="@style/AppTheme.PopupOverlay"
                app:layout_collapseMode="pin"/>
        </Android.support.design.widget.CollapsingToolbarLayout>


    </Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>

main_menu.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/logoutMenu"
        Android:orderInCategory="100"
        Android:title="@string/log_out"
        app:showAsAction="never"
        Android:actionLayout="@id/toolbar"/>
    <item
        Android:id="@+id/sortMenu"
        Android:orderInCategory="100"
        Android:title="@string/sort"
        app:showAsAction="never"/> </menu>
0
Natan Rincker

Eine einfache Lösung für dieses Problem bestand darin, showAsAction in menu.xml in res/menu auf always zu setzen

<?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/add_alarm"
        Android:icon="@drawable/ic_action_name"
        Android:orderInCategory="100"
        Android:title="Add"
        app:showAsAction="always"
        Android:visible="true"/>

</menu>
0
LoLcode69