Информация о стилях меню ActionBar Overflow для ручной реализации

Я пытаюсь продублировать функциональность раскрывающегося меню Overflow для других элементов ActionBar. Я работаю над ручным внедрением этой функции, поскольку я думаю, что она была исключена из среды (вероятно, для принудительной стандартизации пользовательского интерфейса). Кто-нибудь знает, какие элементы стиля/стиля используются для раскрывающегося списка при нажатии на меню «Переполнение»?

ИЗМЕНИТЬ

Кнопка переполнения на самом деле представляет собой модифицированный счетчик. Вот информация о стиле для него.

<style name="Widget.Holo.Spinner" parent="Widget.Spinner.DropDown">
    <item name="android:background">@android:drawable/spinner_background_holo_dark</item>
    <item name="android:dropDownSelector">@android:drawable/list_selector_holo_dark</item>
    <item name="android:popupBackground">@android:drawable/menu_dropdown_panel_holo_dark</item>
    <item name="android:dropDownVerticalOffset">0dip</item>
    <item name="android:dropDownHorizontalOffset">0dip</item>
    <item name="android:dropDownWidth">wrap_content</item>
    <item name="android:popupPromptView">@android:layout/simple_dropdown_hint</item>
    <item name="android:gravity">left|center_vertical</item>
</style>

person Graeme    schedule 22.08.2011    source источник


Ответы (2)


Вот обзор того, что я собрал вместе:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dropdownContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/leftBuffer"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1" />

    <LinearLayout
        android:layout_width="150dp"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/actionbarDropdown"
            style="@style/Widget.ActionBarDropDown"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:cacheColorHint="@android:color/transparent"
            android:entries="@array/sortOptions" />

        <LinearLayout
            android:id="@+id/bottomBuffer"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/rightBuffer"
        android:layout_width="118px"
        android:layout_height="match_parent" />

</LinearLayout>

Добавление onClick к элементу ActionBar, который: добавляет вышеприведенный макет в качестве дочернего элемента в корневую группу ViewGroup для действий, создает иллюзию раскрывающегося списка.

Добавление onClick к каждому из буферов, которое удаляет представление из корневой ViewGroup, позволяет раскрывающемуся меню «выйти» при попытке переместить фокус.

Информация о стиле для раскрывающегося списка:

<item name="android:background">@drawable/menu_dropdown_panel_holo_light</item>
<item name="android:dropDownSelector">@drawable/list_selector_background</item>

Макет для каждого элемента списка:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="48dp"
      android:textSize="17sp"
      android:gravity="right|center_vertical"
      style="?android:attr/dropDownItemStyle"
      android:ellipsize="marquee"
      android:id="@android:id/text1">    
</TextView>

Это не дает идеальной копии функциональности раскрывающегося списка переполнения, но чертовски близко. Мне очень интересно, если кто-нибудь еще знает способ воспроизвести эту функциональность более интегрированным способом!

person Graeme    schedule 25.08.2011
comment
Как определяется style=@style/Widget.ActionBarDropDown? Я не могу разрешить этот стиль? - person Henrik; 27.02.2013

Я достиг этого с помощью простого пользовательского представления, которое я помещаю в панель действий:

<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/action_starred"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    style="?android:attr/actionButtonStyle"
    android:src="@drawable/ic_action_star" />

Затем я присоединяю к нему OnClickListener в onCreateOptionsMenu(), который просто добавляет фрагмент, который заботится о создании ListPopupWindow и установке якоря в качестве представления действия. Он находит представление действия через getActivity().findViewById(R.id.action_starred).

Вот и все, вы можете сделать всплывающее окно модальным, чтобы оно больше походило на меню. В качестве элементов списка вы можете использовать что-то вроде android.R.layout.simple_dropdown_item_1line.

Этот метод должен работать одинаково хорошо, даже если вы не помещаете представление в ActionBar, как это делаю я.

person alexanderblom    schedule 26.08.2011