2016-09-11 4 views
15

Ich versuche, Android ActionBar in meiner App zu verwenden, und habe eine Option, die im Überlaufmenü versteckt ist.Wie Überlaufmenü zu Toolbar hinzufügen?

Es gibt viele Dokumente da draußen, aber es ist verwirrend, weil das meiste nur für sehr alte Versionen von Android relevant ist, und wenn Sie versuchen, die gleichen Konzepte anzuwenden, funktionieren sie nicht mehr oder arbeiten anders.

Dies ist in meinem Activity Layout

<android.support.v7.widget.Toolbar 
    android:id="@+id/my_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:titleTextColor="@android:color/white" 
    android:background="@color/colorPrimary" 
    android:elevation="4dp" 
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

Und das ist in meinem Activity ‚s onCreate() Methode

// sets up activity toolbar 
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); 
setSupportActionBar(myToolbar); 

myToolbar.showOverflowMenu(); 
myToolbar.setTitleTextColor(R.color.lightPrimaryText); 

ich auch versucht haben, ein Menü XML-Datei aus dem onCreateOptionsMenu() aufblasen, aber das gab mir auch nicht die Ergebnisse, die ich wollte.

Antwort

25

definieren ein Menu für Ihre Toolbar in den res/Menü Ressourcenordner, zum Beispiel:

toolbar_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" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".activity.MainActivity"> 

    <item 
     android:id="@+id/action_sign_out" 
     android:title="@string/toolbar_sign_out" 
     app:showAsAction="never"/> 
</menu> 

Einstellung app:showAsAction="never" stellt sicher, dass diese MenuItem nicht in gezeigt werden die Toolbar, sondern stattdessen in das Überlaufmenü platziert.

Das Thema Ihrer Activity sollte einer der NoActionBar AppCompat Themen (Theme.AppCompat.Light.NoActionBar zum Beispiel) sein (oder davon abgeleitet werden).

In Ihrem Activity, richten Sie Ihren Toolbar:

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); 
setSupportActionBar(myToolbar); 

Und außer Kraft setzen onCreateOptionsMenu():

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

Sie onOptionsItemSelected() außer Kraft setzen können das onClick Verhalten Ihrer MenuItem (s) zu definieren:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_sign_out: { 
      // do your sign-out stuff 
      break; 
     } 
     // case blocks for other MenuItems (if any) 
    } 
    return false; 
} 
1

in Manifest-Datei

android:theme="@style/AppTheme.NoActionBar" 

wie folgt erklären:

<activity 
    android:name=".ActivityName" 
    android:label="@string/label" 
    android:theme="@style/AppTheme.NoActionBar" /> 

und fügen Sie diese zu Ihrem Stil:

<style name="AppTheme.NoActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

und nennen dies in Aktivität onCreate():

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

überschreiben Sie diese Methode in Tätigkeit:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.product_list, menu); 
    //U can find item set icon and stuff... 
    MenuItem item= menu.findItem(R.id.action_search); 

    return true; 
} 

und Ihr Menü, wie dies für Überlaufmenü erklären:

<?xml version="1.0" encoding="utf-8"?> 
<menu > 
    <group> 
     <item 
      android:id="@+id/sign_out" 
      android:title="@string/sign_out" /> 
     <item 
      android:id="@+id/about" 
      android:title="@string/about" /> 
    </group> 
</menu> 

und für die Auswahl Anruf Griff Artikel dieses

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    switch (id) { 
     case R.id.sign_out: 
     //do stuff 
      break; 
      } 
     return super.onOptionsItemSelected(item); 
    } 

done :)

-1

Einfache do Kopieren Sie diesen Code auf Ihren MainActivt`

@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; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      Group gp=(Group)findViewById(R.id.order); 

      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    }` 

Jetzt Verzeichnisdatei für Menünamen Machen Sie diese für gehen auf Android_Studio-> App Ordner-> Right_Click-> Neu> Verzeichnis-> Geben Sie jetzt Namen Menü eine XML-Datei mit menu2.xml Namen dort erstellen

und hinter diesem Code auf menu2.xml Datei

<?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_settings" 
     android:orderInCategory="100" 
     android:title="@string/action_settings" 
     app:showAsAction="never" 
     android:icon="@android:drawable/ic_input_add" 
     /> 

</menu> 

, wenn eine Abfrage mir bitte Text

Verwandte Themen