更改android中只有一个菜单项图标的颜色

时间:2015-09-27 10:35:28

标签: android android-actionbar background-color menuitem

我想只更改操作栏中的一个菜单项。我尝试更改相同的图标颜色,而不是将其透明为所需的颜色,但边缘显示操作栏的背景。

这是我的操作栏的样子:

https://www.dropbox.com/s/1sjnk975dnj17kr/before.png?dl=0

这是我想达到的目标:

https://www.dropbox.com/s/ul7hh2gxtfox1pk/goal.png?dl=0

以下是我的xml文件:

menu_main.xml

<item
    android:id= "@+id/location"
    android:icon="@drawable/ic_room_white_48dp"
    android:title=""
    android:orderInCategory="2"
    app:showAsAction="always"/>


<item
    android:id= "@+id/report"
    android:icon="@drawable/report"
    android:title=""
    android:orderInCategory="3"
    app:showAsAction="always"/>


<item
    android:id= "@+id/message"
    android:icon="@drawable/ic_comment_white_48dp"
    android:title=""
    android:orderInCategory="4"
    app:showAsAction="always"/> 

styles.xml

<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">

    <item name="colorPrimary">#B9ACC1</item>

    <item name="colorPrimaryDark">#827689</item>

    <item name="colorAccent">#827689</item>

    <item name="android:actionButtonStyle">@style/MyActionButtonStyle</item>
</style>

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


    <item name="android:padding">15dip</item>

</style>

1 个答案:

答案 0 :(得分:1)

更新1: 添加一种避免xml和代码重复的方法。

更新2: 添加静态侦听器。

我不知道您是否可以通过更改menu.xml来实现目标,但工具栏是一个viewGroup,因此您可以使用view.xml实现您的目标:

toolbar.xml:          

    <LinearLayout
        android:layout_width="?attr/actionBarSize"
        android:layout_height="match_parent"
        android:layout_marginRight="8dp"
        android:background="#000000">

        <Button
            android:id="@+id/button_first"
            android:layout_width="?attr/actionBarSize"
            android:layout_height="match_parent"
            android:background="@android:drawable/ic_lock_idle_lock" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="?attr/actionBarSize"
        android:layout_height="match_parent"
        android:layout_marginRight="8dp"
        android:background="#000000">

        <Button
            android:id="@+id/button_second"
            android:layout_width="?attr/actionBarSize"
            android:layout_height="match_parent"
            android:background="@android:drawable/ic_lock_idle_lock" />

    </LinearLayout>

</android.support.v7.widget.Toolbar>

在您的所有xml上添加此代码可能会很无聊所以我建议您使用这样的<include />属性:

main.xml中

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

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar"/>


</RelativeLayout>

然后,您只需设置工具栏并使用按钮

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Button buttonFirst = (Button) findViewById(R.id.button_first);
    final Button buttonSecond = (Button) findViewById(R.id.button_second);

    buttonFirst.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    buttonSecond.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
   });
}

如果你的所有按钮都有相同的监听器,你可以将它们设置为静态以避免代码重复:

IconListener.java:

public class IconListener {

    public static View.OnClickListener listenerButtonOne = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //DO what you want
        }
    };

    public static View.OnClickListener listenerButtonTwo = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Do what you want
        }
    };
}

所以你的MainActivity.java变成了

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Button buttonFirst = (Button) findViewById(R.id.button_first);
    final Button buttonSecond = (Button) findViewById(R.id.button_second);

    buttonFirst.setOnClickListener(IconListener.listenerButtonOne)
    buttonSecond.setOnClickListener(IconListener.listenerButtonTwo);
}
相关问题