使用溢出菜单项的自定义视图

时间:2013-03-11 11:59:18

标签: android actionbarsherlock

我在操作栏sherlock中的溢出菜单上做任何事都很困难。

screenshot

理想情况下,我想为每个项目使用自定义TextView,以便在其上设置不同的字体并更改pressed状态的颜色。

我尝试过(一切都没有成功):

Changing The Style Of Actionbar Overflow
Actionbar styled overflow menu items
listview as action overflow in sherlock actionbar
https://groups.google.com/forum/#!msg/actionbarsherlock/5lHOKNlXn_4/f9XicMXbFFAJ

我的应用会有不同的片段,所有片段都在溢出菜单中扩展BaseFragment不同的项目。我也在使用v4支持包。我正在创建这样的菜单:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.activity_borrow, menu);
}

activity_borrow.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_filter"
        android:title="test"
        android:orderInCategory="100"
        android:showAsAction="never"
/>
</menu>

我的应用使用的是继承自Theme.Sherlock

的主题

如何在该菜单中使用自定义视图?或者至少,我如何更改默认的蓝色pressed状态?

1 个答案:

答案 0 :(得分:4)

要更改溢出列表项的颜色,请在应用主题中添加两个项目,通常在res/values/styles.xml中定义:

<item name="android:dropDownListViewStyle">@style/DropDownListView</item>
<item name="dropDownListViewStyle">@style/DropDownListView</item>

在同一个文件中,添加刚刚分配的样式:

<style name="DropDownListView" parent="@style/Widget.Sherlock.ListView.DropDown">
  <item name="android:listSelector">@drawable/selectable_background</item>
</style>

最后在drawable文件夹中创建一个可绘制的selectable_background.xml选择器,其中包含:

<selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:exitFadeDuration="@android:integer/config_mediumAnimTime" >
    <item android:state_pressed="false" android:state_focused="true" android:drawable="@color/focussed_color" />
    <item android:state_pressed="true" android:drawable="@color/pressed_color" />
    <item android:drawable="@android:color/transparent" />
</selector>

最后,定义通常放在colors.xml中的颜色:

<resources>
    <color name="pressed_color">#FF8E4067</color> <!-- your purple tone already ;) -->
    <color name="focussed_color">#DD8E4067</color>
</resources>

在我的应用程序中,我使用了“ActionBar Style Generator”作为baboo建议,它可以方便地为您处理所有事情。对于这个答案,我只是提取并简化了我认为构成溢出菜单样式的部分。

我认为关于造型三种不同项目的效果有一些谜团:

  • 根据我的理解,android:dropDownListViewStyle包括 溢出菜单隐藏在ActionBar中的“三个点”后面。
  • 不要与 android:actionDropDownStyle混淆,如果您使用actionBar.setNavigationMode(NAVIGATION_MODE_LIST)
  • 但是,某些带有硬件菜单按钮的Android设备(例如Nexus S或Galaxy S3 Mini) 不显示“三个点”,而是显示从中滑入的叠加菜单 如果单击硬件菜单按钮,则屏幕底部。 android:popupMenuStyle是设置此样式的正确属性。

同样,这只是我记忆中自己开发的应用程序。

另外,请务必检查没有其他样式文件(例如configuration qualifiers的文件夹)覆盖您刚刚定义的样式。

总而言之,我知道这只会改变列表项的背景颜色。要在其中使用完全自定义视图,您可以创建custom spinner view,向ActionBar添加一个带有“三点”图标的虚拟按钮,并在点击时打开微调器。