【问题标题】:ShowcaseView highlights wrong itemShowcaseView 突出显示错误的项目
【发布时间】:2014-10-01 15:24:58
【问题描述】:

我是这样使用 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();

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

知道为什么会发生这种情况吗?

【问题讨论】:

  • “重新启动应用程序”是什么意思。您是强制关闭它并打开它还是调用 onPause + onResume 重新打开它?另外,您何时调用此代码?因为当时R.id.menu_search可能还不可用
  • @PedroOliveira 我在 onCreate() 中调用它。显然这是一个错误的地方。
  • 使用此代码的最佳位置是 onCreateOptionsMenu ,即使在那里 R.id.menu_search 也没有指向视图,因为它还没有被膨胀,所以你必须找到一种方法来做到这一点没有使用 id。
  • @PedroOliveira 也许您可以发布一个答案,以便我接受。

标签: android showcaseview


【解决方案1】:

根据要求:

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

【讨论】:

    【解决方案2】:

    我将尝试在这里展示示例代码:

    @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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 2020-07-12
      • 2022-11-19
      相关资源
      最近更新 更多