在 android 中仅更改一个菜单项图标的颜色
change color of only ONE menu item icon in 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>
更新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);
}
我只想更改操作栏中的一个菜单项。我尝试更改相同的图标颜色,而不是将其透明化为所需的颜色,但边缘显示了操作栏的背景。
这是我的操作栏的样子:
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: 添加避免 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);
}