android 支持v7 MenuPopupHelper现在已隐藏并限制为LIBRARY_GROUP

s4chpxco  于 2023-01-28  发布在  Android
关注(0)|答案(4)|浏览(137)

最近,我在使用android.support.v7.view.menu.MenuPopupHelper时遇到了一个lint错误,这个错误现在被隐藏起来了,只能在它的库组中使用。

确切消息:

MenuPopupHelper constructor can only be called from within the same library group (groupId=com.android.support)

摘自MenuPopupHelper.java类:

/**
 * Presents a menu as a small, simple popup anchored to another view.
 *
 * @hide
 */
@RestrictTo(LIBRARY_GROUP)
public class MenuPopupHelper implements MenuHelper {

**问题:**是否知道发生这种情况的时间和原因?或者我应该寻找什么解决方法?

9rbhqvlz

9rbhqvlz1#

我刚刚发现here,这是该工具预发布版本中的一个bug。
如果您需要项目范围的解决方案,请将下面的代码段放入项目的build.gradle文件中

android {
  lintOptions {
    disable 'RestrictedApi'
  }
}


使用下面的注解可以取消该特定方法或类的lint警告

@SuppressLint("RestrictedApi")
ffvjumwh

ffvjumwh2#

我在Lint报告中出现错误:
错误:MenuPopupHelper.show只能从相同的库组前缀中调用(引用的groupId=androidx.appcompat具有来自groupId=MyProject的前缀androidx)[RestrictedApi] }.show()
如果您没有在PopupMenu中使用icons,则可以删除MenuPopupHelper
之前:

val popupMenu = PopupMenu(context, v)
...
val menuHelper = MenuPopupHelper(context, popupMenu.menu as MenuBuilder, v)
menuHelper.gravity = Gravity.END
menuHelper.show()

之后:

val popupMenu = PopupMenu(context, v)
...
popupMenu.gravity = Gravity.END
popupMenu.show()

或者添加@SuppressLint("RestrictedApi")注解。

h22fl7wq

h22fl7wq3#

当我迁移到AndroidX时,我遇到了同样的问题,我替换了以下类:
android.support.v7.widget.PopupMenu
android.support.v7.view.menu.MenuPopupHelper
和新的
androidx.appcompat.widget.PopupMenu
androidx.appcompat.view.menu.MenuPopupHelper
我得到了同样的lint错误。
在查看参考文档后,我发现现在我可以只使用PopupMenu获得相同的行为,而不需要MenuPopupHelper,即使我的弹出菜单有图标。

PopupMenu popup = new PopupMenu(getActivity(), view);
            popup.getMenuInflater().inflate(R.menu.opzioni_programma, popup.getMenu());
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.action_programma_calendar:
                            // menu item logic
                        case R.id.action_programma_search:
                            // menu item logic
                        default:
                            return false;
                    }
                }
            });
            popup.setForceShowIcon(true);
            popup.show();
jv4diomz

jv4diomz4#

尝试改用android.support.v7.widget.PopupMenu

PopupMenu popup = new PopupMenu(v.getContext(), v);
popup.inflate(R.menu.mymenu);
//or
//popup.getMenuInflater().inflate(R.menu.mymenu, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    public boolean onMenuItemClick(MenuItem item) {
        final int itemId = item.getItemId();
        switch (itemId) {
            case R.id.someid:
                //do something
                return true;
            default:
                return false;
        }
    }
});
popup.show();

相关问题