我正在尝试复制其他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>
答案 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
中,此方法也应该同样有效。