PopupWindow - 没有在一些设备上工作

pro*_*m85 16 android popupwindow android-popupwindow

我使用以下代码来显示一个小弹出窗口:

public static PopupWindow showImportMenu(Activity activity, View anchor, PopupWindowClickListener onClickListener)
{
    LayoutInflater inflater = LayoutInflater.from(activity);

    PopupImportBinding binding = DataBindingUtil.inflate(inflater, R.layout.popup_import, null, false);

    if (!RootTools.isRootAvailable())
        binding.llImportRootMethod.setVisibility(View.GONE);


    PopupWindow popupWindow = new PopupWindow(activity, null, R.attr.popupMenuStyle);
    popupWindow.setFocusable(true);
    popupWindow.setContentView(binding.getRoot());
    popupWindow.setOutsideTouchable(true);
    PopupWindowCompat.showAsDropDown(popupWindow, anchor, 0, 0, Gravity.BOTTOM);

    View.OnClickListener clickListener = new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            onClickListener.onClick(popupWindow, view);
        }
    };

    binding.llImportDefault.setOnClickListener(clickListener);
    binding.llImportRootMethod.setOnClickListener(clickListener);
    binding.llImportHTCFromContacts.setOnClickListener(clickListener);
    binding.llImportManual.setOnClickListener(clickListener);

    return popupWindow;
}
Run Code Online (Sandbox Code Playgroud)

这适用于很多设备,但在一些罕见的设备上它不起作用,如:

  • Android 5.1.1 root slim rom
  • 也许是其他人......直到现在,我还不了解其他设备

我收到的反馈是没有显示弹出窗口.有谁知道为什么这不适用于上述设备?我能做些什么才能让它在这个设备上运行?

编辑

似乎我不想清楚我想要的是:

  • 使用showAsDropDown没有showAtLocation或类似的,我从来没有看到这个问题showAtLocation还没有
  • 我的解决方案几乎适用于所有设备,它似乎是一个特定于手机/ ROM的问题,也许它甚至无法解决,因为它可能也是设备中的一个错误=>如果有人知道这样的错误,告诉我会是很好
  • 我不想使用对话框(或其他任何东西),而不是回答我的问题.我目前使用的BottomSheet对我来说很好,但我仍然想知道问题是否可以解决并以某种方式处理

Chr*_*ris 5

在运行5.1.1的Nexus 7(不是2012)上,我遇到了同样的问题。最后通过添加以下行来修复它:

popupWindow.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
Run Code Online (Sandbox Code Playgroud)


Ven*_*esh 0

在此输入图像描述## 好吧,我实现了弹出窗口,用于在我的选项卡片段中进行排序,并且我检查过一次尝试后工作正常

我在弹出窗口的自定义布局中使用了

  final PopupWindow popupWindow = new PopupWindow(getActivity());
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View view = inflater.inflate(R.layout.popmenu1t1, null);
            l8[![enter image description here][1]][1] = (LinearLayout) view.findViewById(R.id.atoz);


  l8.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    date_sort="0";
                    discount_sort="";
                    price_sort="";
                    alpha_sort="";
                    popupWindow.dismiss();
                }
            });
            int width = 900;
            int height = 400;
            try {
                WindowManager wm = (WindowManager)view.getContext().getSystemService(Context.WINDOW_SERVICE);
                width = wm.getDefaultDisplay().getWidth();
                height = wm.getDefaultDisplay().getHeight();
            } catch (Exception e) {
                e.printStackTrace();
            }
            popupWindow.setWidth(width*3/6);
            popupWindow.setFocusable(true);
            popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
            popupWindow.setContentView(view);
            popupWindow.setBackgroundDrawable(null);
            popupWindow.setOutsideTouchable(true);
            popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中找到下面附加的屏幕截图弹出窗口