使用自定义视图来处理溢出菜单项

4

我在使用ActionBar Sherlock的overflow菜单时遇到了实际困难。

screenshot

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

我已经尝试过以下方法(都没有成功):

更改Actionbar Overflow的样式
Actionbar风格的溢出菜单项
在Sherlock ActionBar中将ListView作为Action Overflow
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状态?


尝试使用http://jgilfelt.github.com/android-actionbarstylegenerator/生成您自己的样式并使用它。 - baboo
1
我不想覆盖整个应用程序的样式 - 我只需要一个小部分,而该生成器无法提供。 - boz
1个回答

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是正确的属性来样式化它。
再次强调,这只是我从自己的应用程序开发中记得的。
此外,请确保检查没有其他样式文件(例如,具有配置限定符的文件夹)覆盖您刚刚定义的样式。
总之,我了解到这只会更改列表项的背景颜色。要在其中使用完全自定义视图,可以创建自定义微调器视图,将一个带有“三个点”图标的虚拟按钮添加到您的ActionBar中,并在单击时打开微调器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接