2016-02-18 7 views
10

Ich versuche, ein SwitchCompat Widget im Überlaufmenü von android.support.v7.widget.Toolbar zu verwenden, aber ich kann es einfach nicht zum Laufen bringen, es erscheint immer leer.Kann ich actionLayout im Überlaufmenü von android.support.v7.widget.Toolbar verwenden?

Hier mein Menü Definition lautet:

<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="com.oveflowtest.ScrollingActivity"> 
    <item 
     android:id="@+id/action_settings" 
     android:orderInCategory="100" 
     android:title="@string/action_settings" 
     app:showAsAction="never"/> 
    <item android:id="@+id/test" 
      app:actionLayout="@layout/testlayout" 
      app:showAsAction="never"/> 
</menu> 

Und hier ist testlayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
<android.support.v7.widget.SwitchCompat 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" android:text="test"/> 
</LinearLayout> 

Auch wenn ich showAsAction zu always statt never dann zeigt es ändern in der Symbolleiste ganz gut, aber ich don Ich will es dort, ich will es auf dem Überlaufmenü, das sich öffnet, wenn ich die 3 Punkte drücke.

Ich weiß, es gibt eine Option, ein Häkchen zu verwenden, aber das Design, das ich befolge, fordert einen Schalter.

Danke.

Antwort

11

Es ist nicht möglich.

Das liegt daran, actionLayout wird nur verwendet, wenn das Element als Aktion angezeigt wird. Es ist äquivalent zu setActionView und von den documentation:

eine Aktion Ansicht für diesen Menüpunkt ein. Eine Aktionsansicht wird anstelle eines automatisch generierten Menüelementelements in der Benutzeroberfläche angezeigt, wenn dieses Element als Aktion innerhalb eines übergeordneten Elements angezeigt wird.

So können Sie eine benutzerdefinierte Ansicht aufzublasen, wenn es als eine Aktion verwendet wird (wenn showAsActionnever ist, dann ist es nicht so Wirkung gezeigt, wie erwartet).

nun woanders versteckt, in der documentation for ActionProvider, gibt es dies:

Wenn der Menüpunkt in einer Weise präsentiert wird, die nicht benutzerdefinierte Aktion Ansichten erlaubt, (zB in einem Überlauf-Menü), um die ActionProvider kann eine Standardaktion ausführen.

Es ist ausdrücklich, dass das Überlaufmenü kann nicht Anzeige benutzerdefinierte Ansicht angegeben.

[Edit: mögliche Abhilfe]
Wenn Sie wirklich wollen es auf diese Weise angezeigt werden, können Sie gefälschte ein Überlauf-Menü mit PopupWindow, aber dann können Sie Konsistenz mit der Plattform in einigen Geräten verlieren oder sogar nach ein Upgrade auf Android (sagen wir mal ... du hast drei runde Punkte benutzt, um das Überlaufmenü zu simulieren, aber später wird es auf Android zurückgesetzt, deine App wird merkwürdig aussehen. Es gibt auch den zusätzlichen Aufwand, es mit einer Menu zu betreiben wäre einfach.