ShowcaseView突出显示错误的项目

时间:2014-10-01 15:24:58

标签: android showcaseview

我像这样使用ShowcaseView:

ActionItemTarget target = new ActionItemTarget(this, R.id.menu_search);

ShowcaseView sv = new ShowcaseView.Builder(this, true)
                .setTarget(target)
                .setContentText("Press this to search")
                .setStyle(R.style.CustomShowcaseTheme)
                .build();

但是当我第一次启动app时,ShowcaseView会突出显示主页按钮。当我再次尝试启动应用程序时,会显示正确的ActionBar项目。 我的应用程序不使用ActionbarSherlock等兼容性库。

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

根据要求:

问题是您正在尝试检索尚未在层次结构中的视图的ID。根据活动视图周期,菜单仅在onCreate之后创建。最好的解决方案是使用onCreateOptionsMenu,但即使此处R.id.menu_search也不会返回有效的ID,因为尚未创建菜单。由于API lvl 16中事件的顺序已经改变,我建议你稍微破解它。您可以在onCreate()上创建一个处理程序并执行postDelayed runable。设计菜单后将执行代码。在那个可运行的,您可以检索R.id.menu_search的视图并突出显示它。

答案 1 :(得分:0)

我将尝试在此处提供示例代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    new ShowcaseView.Builder(this)
            .withMaterialShowcase()
            .setTarget(new ToolbarActionItemTarget(this.toolbar, R.id.menu_search))
            .setContentText("Here's how to highlight items on a toolbar")
            .build()
            .show();

    return true;
}

注意:工具栏声明为该类的成员。