从MenuItem获取哪个属性“ showAsAction”从不显示

时间:2018-07-23 08:10:08

标签: android menu-items

我使用此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相关问题,但仍然遇到相同的错误。是否有可能获得不可见的物品(绝不作为动作)?

2 个答案:

答案 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并使用它。