代码之家  ›  专栏  ›  技术社区  ›  MrX

从MenuItem获取视图哪个属性“showAsAction”从不

  •  0
  • MrX  · 技术社区  · 6 年前

    我用这个 library 带导游参观我想把聚光灯应用到 Menu Item 有财产的 showAsAction 从来没有下面是我的代码片段:

    View view = getActivity().findViewById(R.id.menu_item_refresh);
            new SpotlightView.Builder(getActivity())
                    .introAnimationDuration(400)
                    .enableRevealAnimation(true)
                    .performClick(true)
                    .fadeinTextDuration(400)
                    .headingTvColor(Color.parseColor("#eb273f"))
                    .headingTvSize(32)
                    .headingTvText("")
                    .subHeadingTvColor(Color.parseColor("#ffffff"))
                    .subHeadingTvSize(16)
                    .subHeadingTvText("Tap on chart to show detail")
                    .maskColor(Color.parseColor("#dc000000"))
                    .target(view)
                    .lineAnimDuration(400)
                    .lineAndArcColor(Color.parseColor("#eb273f"))
                    .dismissOnTouch(true)
                    .dismissOnBackPress(true)
                    .enableDismissAfterShown(true)
                    .usageId("")
                    .show();
    

    我得到这个错误:

    FATAL EXCEPTION: main
                     Process: x.com.d, PID: 15058
                     java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.getLocationInWindow(int[])' on a null object reference
                     at com.wooplr.spotlight.target.ViewTarget.getPoint(ViewTarget.java:23)
                     at com.wooplr.spotlight.shape.Circle.getFocusPoint(Circle.java:36)
                     at com.wooplr.spotlight.shape.Circle.<init>(Circle.java:24)
                     at com.wooplr.spotlight.SpotlightView$Builder.build(SpotlightView.java:1082)
                     at com.wooplr.spotlight.SpotlightView$Builder.show(SpotlightView.java:1091)
    

    我看到错误的发生是因为 菜单项 在主视图上不可见我读过 this 相关的问题,但我仍然得到同样的错误有可能得到看不见的东西吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   gi097 Sildoreth    6 年前

    你需要 override 以下 method 访问 MenuItem View :

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        MenuItem menuItem = menu.findItem(R.id.the_one_to_spotlight);
        View view = MenuItemCompat.getActionView(menuItem);
    
       // Now do whatever you want with the View
    
        return super.onPrepareOptionsMenu(menu);
    }
    

    我想 .target(view) 在这种情况下会成功的。

    如果那还不能给你 View 你需要,我会考虑改变你的 showAsAction . 请在此处阅读有关此的更多有用信息: https://stackoverflow.com/a/23080138/5457878

        2
  •  0
  •   MrX    6 年前

    我找到了解决办法 reference . Jarredrummler回答 OverflowbMenuButton 作为一个 ImageView . 使用该方法并将 OverflowMenuButton 作为视图并使用它。