我使用此library来显示向导游。我想将Spotlight实施到具有属性Menu Item
的{{1}}中,再也没有。在我的代码段下面:
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相关问题,但仍然遇到相同的错误。是否有可能获得不可见的物品(绝不作为动作)?
答案 0 :(得分:1)
您需要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
答案 1 :(得分:0)
我在此reference上找到了解决方案。 JarredRummler的答案将OverflowbMenuButton
作为ImageView
。使用该方法并将OverflowMenuButton
强制转换为View并使用它。