我使用以下代码显示一个小弹出窗口:
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;
}
这适用于很多设备,但在一些罕见的设备上它不起作用,例如:
- Android 5.1.1 root slim rom
- 也许是其他人……直到现在,我对其他设备还不太了解
我收到没有显示弹出窗口的反馈。有谁知道为什么这在上述设备上不起作用?我能做些什么让它在这个设备上也能正常工作?
编辑
似乎不清楚我想要的是什么:
- 使用
showAsDropDown
而不是showAtLocation
或类似的,我从未见过showAtLocation
的这个问题 - 我的解决方案几乎适用于所有设备,这似乎是特定于电话/ROM 的问题,也许它甚至无法解决,因为它也可能是设备中的错误 => 如果有人知道这样的错误,告诉我也会没事的
- 我不想改用对话框(或其他任何东西),这没有回答我的问题。我目前使用的
BottomSheet
对我来说很好,但我仍然想知道问题是否可以解决并以某种方式处理
最佳答案
我在运行 5.1.1 的 Nexus 7(不是 2012 年)上遇到了同样的问题。最后通过添加这一行来修复它:
popupWindow.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
关于android - PopupWindow - 不适用于少数设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43331748/