获取支持动作条参考抽屉切换获取支持动作条参考抽屉切换(Get reference to drawer

2019-05-12 07:58发布

我用ShowcaseView库的应用程序的教程。 我需要去抽屉式导航切换按钮(又名“汉堡按钮”)的引用:

我使用工具栏的动作条,我不知道如何得到这个按钮。 我用这通常切换抽屉:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            toggleDrawer(Gravity.START);
        }
}

但是当我使用设备监视器,使屏幕的快照,有ID为“家”没有意见。

有什么建议?

Answer 1:

在原来的ActionBar ,两个View在你的左边显示常用的是向上 View家庭 View向上 View是通常显示“汉堡包”图标的按钮,而家庭 View显示的应用程序图标。 事情已经与改变Toolbar类。 不再有一个默认的Viewandroid.R.id.home ID,虽然设置Toolbar为支撑ActionBar仍会触发的onOptionsItemSelected()与相应的项目ID的时候View点击的问题是。

当前Toolbar类现指最多 View内部的导航按钮 View ,并创建一个View动态。 我用两种不同的方法去一个参考-一个遍历一个Toolbar的孩子View S,并且在使用反射一个Toolbar类。

对于迭代法,您所设置的切换后,但你已经添加的任何其他之前ImageButton S到Toolbar ,该导航按钮 View是唯一ImageButton的儿童Toolbar ,你可以得到像这样:

private ImageButton getNavButtonView(Toolbar toolbar)
{
    for (int i = 0; i < toolbar.getChildCount(); i++)
        if(toolbar.getChildAt(i) instanceof ImageButton)
            return (ImageButton) toolbar.getChildAt(i);

    return null;
}

如果你需要的应用程序图标的参考View -即对应于旧居 View -您可以使用类似的方法寻找一个ImageView

反射方法,在另一方面,可以在任何时间所使用的后View已在被设置Toolbar

private ImageButton getNavButtonView(Toolbar toolbar) {
    try {
        Class<?> toolbarClass = Toolbar.class;
        Field navButtonField = toolbarClass.getDeclaredField("mNavButtonView");
        navButtonField.setAccessible(true);
        ImageButton navButtonView = (ImageButton) navButtonField.get(toolbar);

        return navButtonView;
    }
    catch (NoSuchFieldException | IllegalAccessException e) {
        e.printStackTrace();
    }

    return null;
}

再次,可以使用用于图标的类似方法View ,检索代替"mLogoView" Field



Answer 2:

在XML文件中只添加工具栏/布局的最左边的视图,并在您的展示目标使用此视图



文章来源: Get reference to drawer toggle in support actionbar