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-