ActionBar溢出菜单样式信息,用于手动实现

时间:2011-08-22 14:07:10

标签: android styles android-3.0-honeycomb android-actionbar

我正在尝试复制其他ActionBar项目的“溢出菜单”下拉列表功能。我正在努力手动实现这个功能,因为我认为它已被排除在环境之外(可能会强制UI的标准化)。当您单击“溢出”菜单时,是否有人知道下拉列表中使用的样式/样式项?

修改

溢出按钮实际上是一个修改过的微调器。这是它的样式信息。

<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 个答案:

答案 0 :(得分: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项目中:将上述布局作为子项添加到您的Activities根ViewGroup中,可以获得下拉列表的错觉。

将onClick添加到从View 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>

这并没有提供溢出下拉功能的完美副本,但它非常接近。我很感兴趣,如果有其他人知道以更集成的方式重现此功能的方法!

答案 1 :(得分:0)

我通过在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中,此方法也应该同样有效。