如何将主页按钮作为 MenuItem android

How to get Home Button as MenuItem android

我正在设置我的工具栏:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_back);
toolbar.setTitle(R.string.app_name);

如何将主页按钮 (android.R.id.home) 检索为 MenuItem

这是我尝试过的:

MenuItem back = menu.findItem(android.R.id.home);

但出于某种原因,这会造成 NullPointerException。那么如何在不获取 NullPointerException 的情况下将其检索为 MenuItem

This SO answer,建议使用以下代码 ,但它似乎不起作用,我找不到任何其他代码。

getWindow().getDecorView().findViewById(android.R.id.home);

在任何情况下它都是 hacky,因为您不需要那个引用,并且在任何情况下您都不应该遍历视图层次结构来获取它。由于 Android SDK 故意向您隐藏了这一点,因此您不应该尝试获取它,因为即使上面的代码确实有效,它也可能在未来的版本中不起作用(这实际上似乎是对它对我不起作用,因为我在 SDK 23 Marshmallow 中进行了测试。

所以,如果你想设置图标,你可以通过在你的主题中设置android:homeAsUpIndicator来实现,按照建议here

如果要检测主页按钮上的点击事件,正确的方法是覆盖onOptionsItemSelected method of Activity,例如

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case android.R.id.home:
            // do something
            return true;
    }
    return false;
}

this post.

中其他人同意的那样,任何其他用途都将超出预期目的,因此不受支持

我没有找到 MenuItem,但是,要以语法方式禁用主页按钮:

getSupportActionBar().setDisplayHomeAsUpEnabled(true/false)

这就是我需要的。但我仍然没有找到如何将其作为 MenuItem.