如何在单击时更改操作栏中图标的背景颜色?

4

这里提供的解决方案对我无效,因为它需要API14,而我想支持早期版本:

在选择时更改操作栏背景颜色(ActionBarSherlock)

现在,当我用手指点击操作栏上的项目时,它会变成蓝色,我不希望发生这种情况。

信息: 我正在使用SherlockActionBar。

而这个方案不起作用,因为它需要API11:

        ImageView icon = (ImageView) findViewById(android.R.id.home);
        icon.setBackgroundColor(getResources().getColor(R.color.black));

这是我的 action_bar_items.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/abFeed"
        android:icon="@drawable/ic_action_content_paste"
        android:title="@string/abFeed"
        android:showAsAction="always"/>
    <item
        android:id="@+id/abNotifications"
        android:icon="@drawable/ic_action_social_cc_bcc"
        android:title="@string/abNotifications"
        android:showAsAction="always"/>
    <item
        android:id="@+id/abAddNewItem"
        android:icon="@drawable/ic_action_content_new"
        android:title="@string/abAddNewItem"
        android:showAsAction="always"/>
    <item
        android:id="@+id/abSearch"
        android:icon="@drawable/ic_action_action_search"
        android:title="@string/abSearch"
        android:showAsAction="always"/>
</menu>

编辑:以下是帮助我解决问题的方法,感谢Mario Lenci提供的帮助:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@FF000000" /> <!-- pressed -->
<item android:drawable="@android:color/transparent" /> <!-- default -->
</selector>

和样式:xml

<style name="Theme.SherlockCustom" parent="@style/Theme.Sherlock.Light">
    <item name="actionBarItemBackground">@drawable/action_bar_item_background</item>
    <item name="android:icon">@android:color/transparent</item>
    <item name="android:minWidth">0dp</item>
    <item name="android:padding">0dp</item>
</style>

你是如何通过menu.xml向actionbar添加项目的? - Smogger
是的,我会将翻译后的文本附在问题中。 - Kaloyan Roussev
1个回答

4

您需要在应用程序/Activity的主题中设置此属性。

请注意,这句话涉及IT技术。
<item name="android:actionBarItemBackground">@drawable/your_drawable</item>

使用Action Bar Sherlock,您还需要进行设置。
<item name="actionBarItemBackground">@drawable/your_drawable</item>

你可以在这里找到关于ActionBar样式的好文档 here


android:actionBarItemBackground 需要 API 级别 14(当前最低级别为 10) - Kaloyan Roussev
是的,我知道,但你正在使用ActionBarSherlock来解决那个问题。因此,你需要定义两个属性(带有和不带有android:),根据设备加载正确的属性。 - Mario Lenci
1
只需右键单击项目-> Android工具->清除Lint即可。我知道我们应该遵循Lint,但在这种情况下,如果不支持“new”属性,则不会引发任何崩溃或其他问题,因为它将被忽略。 - Mario Lenci
1
推荐的解决方案是在values-v14/中创建一个style.xml文件,并在其中定义与之前不支持的属性相同的主题。然后在另一个文件中保留ActionBarSherlock的内容。 - Mario Lenci
2
你需要将可绘制对象定义为选择器(http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList)。 - Mario Lenci
显示剩余4条评论

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