从 属性 "showAsAction" 从来没有的 MenuItem 获取视图
Get view from MenuItem which property "showAsAction" never
我用这个 library 来展示导游。我想将 Spotlight 实现到 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)
我看到发生错误是因为 Menu Item
在主视图中不可见。我阅读了 this 相关问题,但我仍然遇到同样的错误。是否有可能得到那个不可见的项目(永远不会作为行动)?
您需要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
。在此处阅读有关此的更多有用信息:
我在 reference 上找到了解决方案。 JarredRummler 的回答将 OverflowbMenuButton
作为 ImageView
。使用该方法并将 OverflowMenuButton
转换为 View 并使用它。
我用这个 library 来展示导游。我想将 Spotlight 实现到 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)
我看到发生错误是因为 Menu Item
在主视图中不可见。我阅读了 this 相关问题,但我仍然遇到同样的错误。是否有可能得到那个不可见的项目(永远不会作为行动)?
您需要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
。在此处阅读有关此的更多有用信息:
我在 reference 上找到了解决方案。 JarredRummler 的回答将 OverflowbMenuButton
作为 ImageView
。使用该方法并将 OverflowMenuButton
转换为 View 并使用它。