ActionBar Overflow Информация о стилях меню для ручной реализации - PullRequest
4 голосов
/ 22 августа 2011

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

EDIT

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

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

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

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

<?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, который: добавляет вышеприведенный макет в качестве дочернего элемента в корневую группу действий Activity, дает вам иллюзиювыпадающий

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

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

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

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

0 голосов
/ 26 августа 2011

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

<?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, как я.

...