android - 更改操作栏 onPressed 颜色

标签 android android-actionbar

我不知道如何在 Android 上更改操作栏项目“onPressed”的颜色。我不是在谈论操作栏背景颜色,而是关于蓝色过度状态。我怎样才能改变它的颜色或至少摆脱它?例如带有 homeAsUpIndicator 的 App Icon。

我尝试更改操作栏样式和菜单项样式,但没有任何效果。

谢谢

编辑 到目前为止,这是我的实现:

我的风格xml:

<style name="Theme.AppTheme" parent="@android:style/Theme.Holo">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:selectableItemBackground">@android:color/transparent</item>
    <item name="android:windowEnterAnimation">@anim/fadein</item>
    <item name="android:windowExitAnimation">@anim/fadeout</item>        
    <item name="android:actionBarItemBackground">@android:color/transparent</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">@drawable/actionbarheader</item>
    <item name="android:backgroundStacked">@drawable/actionbarheader</item>
    <item name="android:backgroundSplit">@drawable/actionbarheader</item>
    <item name="android:titleTextStyle">@style/ActionBarTitle</item>
    <item name="android:actionBarItemBackground">@android:color/transparent</item>
    <item name="android:actionButtonStyle">@style/MyActionButtonStyle</item>
    <item name="android:homeAsUpIndicator">@drawable/actionbarlogo</item>
    <item name="android:icon">@drawable/app_icon</item>>
</style>

<style name="ActionBarTitle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textSize">20sp</item>
</style>

<style name="MyActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
    <item name="android:background">@android:color/transparent</item>
</style>

然后我有一个用于 actionbarogo 的可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/actionbarlogo_on" android:state_pressed="true"/>
  <item android:drawable="@drawable/actionbarlogo_on" android:state_focused="true"/>
  <item android:drawable="@drawable/actionbarlogo_off"/>
</selector>

我的操作栏项目的菜单 xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/ContactsMode"
        android:icon="@drawable/actionbarcontacts"
        android:title="@string/contacts"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:background="@android:color/transparent" />
</menu>

最后是项目的可绘制对象:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/actionbarcontacts_on" android:state_pressed="true"/>
  <item android:drawable="@drawable/actionbarcontacts_on" android:state_focused="true"/>
  <item android:drawable="@drawable/actionbarcontacts_off"/>
</selector>

以下是我为 ActionBar 创建菜单项的方法:

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        actionBar.setIcon(R.drawable.actionbarlogo);
        return true;
    }

    public boolean onPrepareOptionsMenu(Menu menu) {        
         MenuItem item= menu.findItem(R.id.ContactsMode);
         if(ContactsButton)
             item.setVisible(true);      
         else
            item.setVisible(false);

         return true;   
    }

最佳答案

要将应用程序图标的背景与 homeAsUpIndicator 一起设置(这两个图标有一个共同的背景),您必须在主题中设置 android:actionBarItemBackground 项。主题必须包含这样的内容(我假设您使用 ActionBarSherlock ):

<style name="MyTheme" parent="@style/Theme.Sherlock">
    <!-- for ActionBarSherlock -->
    <item name="actionBarItemBackground">@drawable/my_background</item>
    <!-- for native ActionBar -->
    <item name="android:actionBarItemBackground">@drawable/my_background</item>
</style>

可绘制的 drawable/my_background.xml 将是 StaleListDrawable ,包含如下内容:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/my_background_pressed" />
    <item
        android:drawable="@drawable/my_background_normal" />
</selector>

要完全禁用背景,可以设置透明背景,或者主题中的值 @null 也可以。

主题项 android:actionBarItemBackground 设置应用图标和 homeAsUpIndicator 的背景。但它也设置了菜单项的默认背景、溢出图标和标题的背景。这些背景可以被覆盖。

菜单项

要更改菜单项背景,请在主题中设置适当的 (android:)actionButtonStyle,如下所示:

<style name="MyTheme" parent="@style/Theme.Sherlock">
    <item name="actionButtonStyle">@style/MyActionButtonStyle</item>
    <item name="android:actionButtonStyle">@style/MyActionButtonStyle</item>
</style>

MyActionButtonStyle 将包含如下内容:

<style name="MyActionButtonStyle" parent="@style/Widget.Sherlock.ActionButton">
    <item name="android:background">@drawable/my_background</item>
</style>

溢出图标

最后,要更改溢出图标背景,请在主题中设置适当的android:actionOverflowButtonStyle,如下所示:

<style name="MyTheme" parent="@style/Theme.Sherlock">
    <item name="actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item>
</style>

MyOverflowButtonStyle 将包含如下内容:

<style name="MyOverflowButtonStyle" parent="@style/Widget.Sherlock.ActionButton.Overflow">
    <item name="android:background">@drawable/my_background</item>
</style>

关于android - 更改操作栏 onPressed 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845549/

相关文章:

安卓kotlin版本

android - Android 中的倒计时器

android - 自定义 ActionBar 主题不起作用

android - 操作栏选项卡不填满屏幕宽度

java - 在已经扩展 ActionBarActivity 的主 Activity 中扩展一个附加类?

Android:需要 android.support.v7.app.ActionBar 找到 android.app.ActionBar

android - 如何使用 lintOptions 在 gradle 上禁用 'contentDescription' 警告?

Android:如何在收到特定广播后启动我的应用程序?

设置 ActionBar 颜色时的 Android UI 故障

java - 使用 for 循环从 map 列表中检索 map