2016-02-18 2 views
10

Я пытаюсь использовать виджет SwitchCompat в меню переполнения android.support.v7.widget.Toolbar, но я просто не могу заставить его работать, он всегда выглядит пустым.Могу ли я использовать actionLayout в меню переполнения файла android.support.v7.widget.Toolbar?

Вот мое определение меню:

<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> 

А вот 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> 

Кроме того, если я изменю showAsAction к always вместо never то это показывает только штраф на панели инструментов, но я не Я хочу его там, я хочу его в меню переполнения, которое открывается, когда я нажимаю 3 точки.

Я знаю, что есть возможность использовать галочку, но дизайн, который я выполняю, вызывает переход.

Спасибо.

ответ

11

Невозможно.

Это потому, что actionLayout используется только в том случае, если элемент показан как действие. Это эквивалентно setActionView и от documentation:

Установить вид действия для этого пункта меню. Представление действий будет отображаться вместо автоматически созданного элемента элемента меню в пользовательском интерфейсе, когда этот элемент будет показан как действие внутри родителя.

Таким образом, вы можете надуть настраиваемое представление, если он используется в качестве действия (если showAsAction является never, то это не показано, как действие, как и ожидалось).

Теперь, спрятанный где-то еще, в documentation for ActionProvider, есть это:

Когда пункт меню представлен таким образом, что не позволяет вид пользовательских действий, (например, в меню переполнения,) в ActionProvider может выполнять действие по умолчанию.

Это явно указано, что меню переполнения не может отображения пользовательского вида.

[Edit: возможно обходной путь]
Если вы действительно хотите отобразить его таким образом, вы можете симулировать меню переполнения с PopupWindow, но тогда вы можете потерять согласованность с платформой в некоторых устройствах или даже после обновление до Android (скажем ... вы использовали три круглых точки для имитации меню переполнения, но позже оно будет заменено на квадраты на Android, ваше приложение будет выглядеть странно. Также есть дополнительные усилия, чтобы заставить его работать, а с Menu он было бы простым.