4 Stimmen

Wie kann man auf dem Galaxy S3 Aktionen zum Overflow-Menü hinzufügen?

Ich stehe vor einem Problem, wenn Aktionen, die im Überlaufmenü der Aktionsleiste angezeigt werden sollen, auf dem Galaxy S3 nicht vorhanden sind. Infolgedessen ist die UX etwas verwirrend - meine Aktionsleiste auf dem Galaxy S3 zeigt nur das App-Logo und den Namen an, bietet aber keine zusätzlichen Funktionen.

Ich möchte auf allen Geräten, die unter Android 4.x laufen, eine identische UX mit Aktionen im Overflow-Menü haben. Ist dies möglich, ohne Drittanbieter-Komponenten wie ActionBarSherlock zu verwenden?

Vielen Dank

2voto

span Punkte 5500

Dies ist eine Entscheidung, die von einigen Herstellern getroffen wurde und die einige "schlechte" Lösungen erfordert, wenn man dies wirklich tun möchte. Das Überlaufmenü ist einfach die "normale" alte Menütaste, die alle Android-Geräte früher hatten. Als die Menütaste von Google in Honeycomb und ICS entfernt wurde, entschieden sich einige Hersteller dafür, die Menütaste beizubehalten. Dies hat zu großer Verwirrung darüber geführt, was die Menütaste ist und was sie bewirkt.

Sie sollten jedoch bedenken, dass der Benutzer eines S3 eine funktionale Menütaste erwarten würde, da er nicht an ein 3-Punkte-Menü gewöhnt ist. Alle Anwendungen, die das eingebaute Menüsystem verwenden, sollten dem Benutzer so erscheinen, wie er es erwartet. Daher würde ich Ihnen dringend davon abraten, Ihre App auf allen Geräten gleich aussehen zu lassen, da dies die Benutzer wahrscheinlich eher verwirren als ihnen helfen würde. Es sollte jedoch möglich sein, sowohl das "richtige" Menüsystem als auch ein "benutzerdefiniertes/fiktives" 3-Punkte-Menü zu implementieren, wenn Sie dies wünschen.

Dieser Beitrag scheint einige gute Leitlinien zu enthalten: https://stackoverflow.com/a/10713860/1068167

2voto

Jazzer Punkte 2963

Es gibt einen schnellen und schmutzigen Weg, das Fehlen einer Hardware-Menütaste vorzutäuschen, indem man ein Feld in der App ViewConfiguration Instanz.

Der folgende Codeschnipsel kann zu Ihrer Aktivität hinzugefügt werden und während onCreate() .

private void enableActionBarOverflow() {
    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();
    }
}

Dies ist keine saubere Lösung, da sich die Implementierung von ViewConfiguration irgendwann in der Zukunft ändern könnte, und da die sHasPermanentMenuKey Feld privat ist, gibt es keine Garantie, dass das Feld immer vorhanden sein wird.

Ich würde dies jedoch nur als letzten Ausweg verwenden, wenn Sie unbedingt ein Überlaufmenü auf Geräten mit einer Menütaste haben müssen.

Unter der Annahme, dass Sie mindestens API 11 (Honeycomb) oder höher sind, wäre eine bessere Lösung, Ihr eigenes Überlaufmenü wie folgt zu erstellen:

  1. Fügen Sie in Ihrer menu.xml einen Menüpunkt für den Überlauf hinzu und stellen Sie ihn so ein, dass er immer angezeigt wird und sich in Ihrer onCreateOptionsMenu()

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        ...
        <item
            android:id="@+id/action_overflow"
            android:icon="@drawable/ic_action_settings"
            android:title="@string/settings"
            android:showAsAction="always">
        </item>
    </menu>

    ,

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater mi = getMenuInflater();
            mi.inflate(R.menu.menu, menu);
            return super.onCreateOptionsMenu(menu);
    }
  2. Erstellen Sie eine separate Ressource overflow_menu.xml für die Auswahlmöglichkeiten, die Sie im Überlaufmenü haben möchten

    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
            android:id="@+id/overflow_action1"
            android:title="@string/overflow_action1">
        </item>
        <item
            android:id="@+id/overflow_action2"
            android:title="@string/overflow_action2">
        </item>
    </menu>
  3. In Ihrem onOptionsItemSelected() Methode, die Auswahl des Überlaufmenüs

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            ...
            case R.id.action_overflow:
                    PopupMenu popup = new PopupMenu(
                            this, findViewById(R.id.action_overflow));
                    MenuInflater inflater = popup.getMenuInflater();
                    inflater.inflate(R.menu.overflow_menu, popup.getMenu());
                    popup.setOnMenuItemClickListener(this);
                    popup.show();
                    return true;
            default:
                    return super.onOptionsItemSelected(item);
            }
    }
  4. Umsetzung der PopupMenu.OnMenuItemClickListener Schnittstelle in Ihrer Aktivität, um die Klicks auf die Überlaufelemente zu verarbeiten

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.overflow_action1:
            //do stuff
            return true;
        case R.id.overflow_action2:
            //do stuff
            return true;
        default:
            return false;
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X