2015-09-27 81 views
0

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

这里是我的行动吧是什么样子:

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> 

+0

安置自己的XML请 –

+0

万一没有人有一个很好的答案,你可以为你的应用自定义样式继承动作条。这是一个很长的路,但并非不可能 – user2875404

+0

@Skizo检查出来,谢谢! – Molan

回答

1

UPDATE1: 添加方式,以避免XML和代码重复。

UPDATE2: 添加静态侦听器。

我不知道,如果你可以改变你menu.xml文件只是实现自己的目标,但工具栏是一个ViewGroup,所以你可以用它view.xml用应该看起来像它实现你的目标:

工具栏.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); 
} 
+0

我试了一下,它的工作,但它不是有效的,如果我有10个活动,每个活动有不同的布局...纠正我如果我错了! – Molan

+0

我刚刚更新了我的回应,以展示如何以有效的方式实现它 – Kassisdion