15

一段时间以来,我一直在尝试为添加到操作栏的下拉列表中的项目设置样式,但我无法提供正确的代码。

我尝试查看项目中的abs__styles.xmland abs__themes.xmlSherlockActionBar但我添加到项目中的所有项目都不起作用。

我创建菜单的方式如下:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Sharing icons
        SubMenu submenu = menu.addSubMenu(null);
        submenu.add(getResources().getString(R.string.twitter));
        submenu.add(getResources().getString(R.string.facebook));
        submenu.add(getResources().getString(R.string.email));

        // Share button itself
        MenuItem ShareButton = submenu.getItem();
        ShareButton.setIcon(R.drawable.icon_share_triangle);
        ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        // Twitter submenu button
        MenuItem TwitterItem = submenu.getItem(0);
        TwitterItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
        TwitterItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                setShareTwitterIntent();
                return true;
            }
        });
...
}

我还尝试使用以下代码查看这篇文章,但仍然没有运气:

<!-- style the list navigation -->
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar">
    <item name="android:background">@drawable/ad_spinner_background_holo_light</item>
    <item name="android:popupBackground">@drawable/ad_menu_dropdown_panel_holo_light</item>
    <item name="android:dropDownSelector">@drawable/ad_selectable_background</item>
</style>

我只需要更改下拉列表中项目的背景颜色。

非常感谢你的帮助!

编辑:

这个我也试过了,还是不行:

<item name="android:actionDropDownStyle">@style/MyApp.DropDownNav</item>
<item name="actionDropDownStyle">@style/MyApp.DropDownNav</item>
...
<style name="MyApp.DropDownNav" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar">
        <item name="android:background">@drawable/sharing_panel</item>
</style>
4

5 回答 5

27

我也遇到了同样的问题,在挠了很多头之后——就像狗身上的跳蚤一样挠——我让它起作用了。这是 ABS 4.1 (90)。下面的代码将改变下拉项目的背景颜色。

SomeActivity.java

Context context = ab.getThemedContext();
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
    context, R.array.map_activity_view_list,
    R.layout.sherlock_spinner_item);
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);

注意:您对 createFromResource 使用 R.layout.sherlock_spinner_item,对 setDropDownViewResource 使用 R.layout.sherlock_spinner_dropdown_item。这是 ABS 源中的示例中出现的内容: https ://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ListNavigation.java

这是因为操作栏中未选择的下拉菜单是 sherlock_spinner_item 布局,而实际的下拉项目使用 sherlock_spinner_dropdown_item 布局,这意味着每个项目的样式都不同:

  • sherlock_spinner_item
    • android:spinnerItemStyle
    • spinnerItemStyle
  • sherlock_spinner_dropdown_item
    • android:spinnerDropDownItemStyle
    • spinnerDropDownItemStyle

请记住,这两种样式都需要 - android: 前缀样式用于原生 ICS ActionBar,而没有 android: 前缀的样式用于 AcrionBarSherlock 样式,适用于早于 ICS 的设备。

res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.MyApp" parent="Theme.Sherlock.Light">
        <!--  the text when loading -->
        <!--
        <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item>
        <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item>
        -->

        <!-- the dropdown items -->
        <item name="android:spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item>
        <item name="spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item>

        <!--  the action bar dropdown menu item -->
        <!-- 
        <item name="android:spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item>
        <item name="spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item>
        -->
    </style>

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
        <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item>
        <item name="android:titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item>
    </style>

   <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title">
    <item name="android:textColor">@color/orange</item>
    </style>

   <style name="MyApp.Widget.Holo.DropDownItem" parent="Widget.Sherlock.Light.DropDownItem.Spinner">
       <item name="android:background">@color/orange</item>
    </style>

   <style name="MyApp.Widget.Holo.SpinnerItem" parent="Widget.Sherlock.TextView.SpinnerItem">
       <item name="android:background">@color/orange</item>
    </style>

</resources>

res/values/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

 <color name="orange">#ffEf4f1f</color>

</resources>

如果这可以解决您的问题,请标记为答案。谢谢!

链接:

浏览样式:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__styles.xml

浏览主题:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__themes.xml

于 2012-07-19T10:20:16.757 回答
4

要更改 Sherlock 操作栏 (v4.1.0) 中菜单项的背景可绘制对象,请使用以下命令:

<style name="My_Theme" parent="Theme.Sherlock">
  <item name="android:popupMenuStyle">@style/MyApp.PopupMenuStyle</item>
  <item name="popupMenuStyle">@style/MyApp.PopupMenuStyle</item>
</style>

<style name="MyApp.PopupMenuStyle" parent="Widget.Sherlock.ListPopupWindow">
  <item name="android:popupBackground">@drawable/menu_item_background</item>
</style>

希望这可以帮助。

于 2012-08-30T03:23:46.010 回答
3

我用过这个,它对我有用

<style name="MyDropDownItem" parent="Widget.Sherlock.Spinner.DropDown.ActionBar">
    <item name="android:background">@drawable/spinner_background_holo_light</item>
    <item name="android:popupBackground">@color/actionbar_normal</item>
    <item name="android:dropDownSelector">@drawable/list_selector_holo_light</item>
</style>

<style name="myTheme" parent="@style/Theme.Sherlock">
    ...
    ...
    ...
    <item name="android:actionDropDownStyle">@style/MyDropDownItem</item>
    <item name="actionDropDownStyle">@style/MyDropDownItem</item>
</style>

在哪里,

“spinner_background_holo_light”和“list_selector_holo_light”是选择器

“actionbar_normal”可绘制(图像或颜色)

于 2012-11-07T13:31:02.397 回答
2

我不确定这个问题是否得到了令人满意的回答,但我遇到了这个问题,没有找到我喜欢的答案。看起来我有一个非常标准的 ActionBarSherLock 配置,并且使用下拉导航给了我一些开箱即用的坏结果。黑色背景上的黑色文本。我想让文本变白。以下是我的实现方式:

对于初学者,我的应用程序的基本主题扩展了 Theme.Sherlock:

<style name="AppBaseTheme" parent="Theme.Sherlock">
</style>

我的实际应用程序主题 AppTheme 扩展了我的基础(我不记得我当时为什么这样做,这可能是不必要的)。

<style name="AppTheme" parent="AppBaseTheme">
    <item name="spinnerItemStyle">@style/SpinnerItemStyle</item>
    <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item>
</style>

我需要覆盖Widget.Sherlock.TextView.SpinnerItem,如下所示:

<style name="SpinnerItemStyle" parent="Widget.Sherlock.TextView.SpinnerItem">
<item name="android:textAppearance">@style/TextAppearance.MySpinnerItem</item>
</style>

这样做的原因是为了访问 TextApperance 小部件:TextAppearance.Sherlock.Widget.TextView.SpinnerItem

这被如下覆盖:

<style name="TextAppearance.MySpinnerItem"    parent="TextAppearance.Sherlock.Widget.TextView.SpinnerItem">
  <item name="android:textColor">#FFFFFF</item>
  <item name="android:textSize">16sp</item>
  <item name="android:textStyle">normal</item>
</style>

我在尝试解决此问题时尝试获取文本的最大错误是尝试在覆盖的 SpinnerItemStyle 中直接设置 textColor。由于它使用了 textAppearance 小部件,因此它无法正常工作。

然后我的代码使这项工作看起来像这样(在我的活动的 onCreate 方法中):

SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this,
            R.array.call_type, R.layout.sherlock_spinner_item);

OnNavigationListener onNavigationListener = new OnNavigationListener() {
        // Get the same strings provided for the drop-down's ArrayAdapter
        String[] strings = getResources().getStringArray(R.array.call_type);

        @Override
        public boolean onNavigationItemSelected(int position, long itemId) {
            String filter = strings[position];
            filterCalls(filter);
            return true;
        }
    };

ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    actionBar.setListNavigationCallbacks(spinnerAdapter,
            onNavigationListener);

这允许我使用 ActionBarSherlock 在微调器下拉菜单上更改文本的颜色。

于 2013-03-08T19:19:06.280 回答
0

ActionBarSherlock 要求您使用它的 3 个主题之一。您可以扩展它们,并覆盖下拉样式,如下所示:

<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light">
   <item name="actionDropDownStyle">@style/MyDropDownNav</item>
</style>

这是假设您想要全息光主题,并且您的下拉样式是 MyDropDownDav。

然后在您的代码中,您只需切换到使用您的主题(在清单中,或者在 Activity 的 onCreate 中执行)。

于 2012-07-09T15:20:04.523 回答