Android Toolbar Menu菜单图标颜色设置
一、整体流程
为了实现Android Toolbar Menu菜单图标颜色设置,我们需要经过以下几个步骤:
步骤 | 描述 |
---|---|
步骤一 | 在res/menu目录下创建菜单文件menu.xml |
步骤二 | 在布局文件中引入Toolbar |
步骤三 | 在Activity中设置Toolbar为Actionbar |
步骤四 | 重写onCreateOptionsMenu方法加载菜单 |
步骤五 | 重写onOptionsItemSelected方法处理菜单点击事件 |
步骤六 | 设置菜单图标颜色 |
二、具体步骤与代码实现
步骤一:创建菜单文件menu.xml
首先,在res/menu目录下创建菜单文件menu.xml。这个文件用于定义我们的菜单项。
<menu xmlns:android="
<item
android:id="@+id/menu_item"
android:title="菜单项"
android:icon="@drawable/menu_icon"
android:showAsAction="always" />
</menu>
步骤二:引入Toolbar
在需要显示Toolbar的布局文件中,添加Toolbar控件。
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="?attr/colorPrimary" />
步骤三:设置Toolbar为Actionbar
在Activity中,设置Toolbar为Actionbar。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
步骤四:加载菜单
重写Activity的onCreateOptionsMenu方法,加载菜单项。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
步骤五:处理菜单点击事件
重写Activity的onOptionsItemSelected方法,处理菜单项的点击事件。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_item) {
// 处理菜单点击事件
return true;
}
return super.onOptionsItemSelected(item);
}
步骤六:设置菜单图标颜色
通过设置MenuItem的图标着色器来改变菜单图标的颜色。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
// 遍历菜单项,设置图标颜色
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
Drawable icon = menuItem.getIcon();
if (icon != null) {
icon.mutate(); // 使图标可变
icon.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); // 设置图标颜色
}
}
return true;
}
三、代码解释与注意事项
在以上代码中,我们使用了如下几个重要的方法:
setSupportActionBar(toolbar)
:将Toolbar设置为Activity的Actionbar。onCreateOptionsMenu(Menu menu)
:重写此方法来加载菜单。getMenuInflater().inflate(R.menu.menu, menu)
:将菜单文件menu.xml加载到menu中。icon.mutate()
:使图标可变,避免多个菜单项共享同一个图标。icon.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP)
:设置图标颜色为白色。
需要注意的是,由于使用了Toolbar作为Actionbar,所以在styles.xml文件中要设置NoActionBar的主题样式。
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 其他样式设置 -->
</style>
四、甘特图
gantt
dateFormat YYYY-MM-DD
title Android Toolbar Menu菜单图标颜色设置
section 创建菜单文件
创建菜单文件 :done, 2021-01-01, 1d
section 引入Toolbar
引入Toolbar :done, 2021-01-02, 1d
section 设置为Actionbar
设置为Actionbar :done, 2021-