wake-up-neo.net

Android Actionbar-Elemente als drei Punkte

Ich habe ein Menü für meine Hauptaktivität (res/menu/main_menu.xml) und ich möchte nur ein Element in der Aktionsleiste und der Rest soll unter dem Menü mit drei Punkten versteckt sein.Three dots menu

Das Problem ist, ich sehe nie die drei Punkte auf meiner Aktionsleiste. Warum sehe ich keine drei Punkte? Wie erzwinge ich, dass Gegenstände darunter versteckt werden?

Hinweis: Ich verwende minSdkVersion = "14" und teste in AVD.

14
Mustafa Chelik
<?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_item_share"
        Android:title="@string/share"
        Android:icon="@Android:drawable/ic_menu_share"
        app:showAsAction="ifRoom"
        Android:actionProviderClass="Android.widget.ShareActionProvider" />

    <item
        Android:id="@+id/empty"
        Android:title="@string/options"
        Android:orderInCategory="101"
        app:showAsAction="always"
        Android:icon="@drawable/ic_action_overflow">

        <menu>

            <item Android:id="@+id/action_settings"
                Android:icon="@Android:drawable/ic_menu_preferences"
                app:showAsAction="ifRoom"
                Android:title="@string/settings" />

            <item Android:id="@+id/action_help"
                Android:icon="@Android:drawable/ic_menu_help"
                app:showAsAction="ifRoom"
                Android:title="@string/help" />

        </menu>

    </item>

</menu>

Sie müssen die ic_action_overflow-Symbole zu Ihren res/drawable...-Ordnern hinzufügen, nachdem Sie sie von hier heruntergeladen haben: http://developer.Android.com/design/downloads/index.html

28

versuche dies;

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/menu_new_content_facebook"
        Android:orderInCategory="100"
        Android:title="@string/str_share_facebook"
        app:showAsAction="never" />

    <item
        Android:id="@+id/menu_new_content_Twitter"
        Android:orderInCategory="200"
        Android:title="@string/str_share_Twitter"
        app:showAsAction="never" />
</menu>

Hauptaktivität.Java

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if(id == R.id.menu_new_content_Twitter){
        // do something
    }
    return super.onOptionsItemSelected(item);
}
5
alicanozkara

diese von ban-geoengineering bereitgestellte Lösung ist eine sehr interessante ... Das 3-Punkt-Symbol wird manchmal nicht angezeigt, wenn Sie Android: showAsAction Namespace Android: verwenden.

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
 xmlns:app="http://schemas.Android.com/apk/res-auto">
<item
    Android:id="@+id/taskNotificationsBtn"
    app:showAsAction="always"
    Android:icon="@drawable/tasks"/>

Die Lösung von ban-geoengineering hilft mir jedoch, das Problem mit der Umkehrung der ActionBar-Elemente zu lösen, um diese an das arabische Layout anzupassen. Ich habe die ActionBarRTLizer-Bibliothek verwendet und den Standardansatz für Android os verwendet. 3Dots verursacht einige Fehler, wenn sich die Menüelementsymbole manchmal gegenseitig bedecken (sehr frustrierende Situation), aber diese benutzerdefinierte Lösung 

<item
    Android:id="@+id/empty"
    Android:title="@string/options"
    Android:orderInCategory="101"
    Android:showAsAction="always"
    Android:icon="@drawable/ic_action_overflow">

    <menu>

        <item Android:id="@+id/action_settings"
            Android:icon="@Android:drawable/ic_menu_preferences"
            Android:showAsAction="ifRoom"
            Android:title="@string/settings" />

        <item Android:id="@+id/action_help"
            Android:icon="@Android:drawable/ic_menu_help"
            Android:showAsAction="ifRoom"
            Android:title="@string/help" />

    </menu>

</item>

das Problem gelöst und RTL funktioniert einwandfrei! :) 

Dies kann auch hilfreich sein, wenn Sie mit Hardware-Menüschaltflächen arbeiten möchten: 

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
   if (keyCode == KeyEvent.KEYCODE_MENU) {
     // do stuff
     return true;
   } else {
     return super.onKeyUp(keyCode, event);
   }
}

und fügen Sie hier hinzu: mMenuReference.performIdentifierAction (R.id.menu_0, 1);

um das Untermenü, das als Überlaufmenü angezeigt wird, zu ersetzen, können Sie beispielsweise diese Lösung verwenden: 

 public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate your main_menu into the menu
      getMenuInflater().inflate(R.menu.main_menu, menu);

      // Find the menuItem to add your SubMenu
      MenuItem myMenuItem = menu.findItem(R.id.my_menu_item);

      // Inflating the sub_menu menu this way, will add its menu items 
      // to the empty SubMenu you created in the xml
      getMenuInflater().inflate(R.menu.sub_menu, myMenuItem.getSubMenu());

   }
5
Michał Ziobro

Warum sehe ich keine drei Punkte?

Ihr Emulator emuliert ein Gerät mit einer MENU-Taste. Wenn sich auf dem Gerät eine MENU-Taste befindet, wird mit der MENU-Taste der Überlauf angezeigt.

2
CommonsWare

Die Lösung finden Sie hier https://stackoverflow.com/a/27502405/1808829 , die für mich perfekt funktionierte. Sie müssen nicht mit XML-Mitarbeitern arbeiten, dies erfolgt nur programmgesteuert. 

private void getOverflowMenu() {

         try {
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if(menuKeyField != null) {
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
0
Sa Qada