我像这样使用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等兼容性库。
知道为什么会这样吗?
答案 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;
}
注意:工具栏声明为该类的成员。