Подтвердить что ты не робот

Могу ли я использовать actionLayout в меню переполнения android.support.v7.widget.Toolbar?

Я пытаюсь использовать виджет SwitchCompat в меню переполнения 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 точки.

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

Спасибо.

4b9b3361

Ответ 1

Это невозможно.

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

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

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

Теперь, скрытый где-то еще, в документации для ActionProvider, это:

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

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

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