Android 嵌入在对话框中的弹出窗口是否可以(以可剪裁的方式)扩展到设备窗口边框?

Android 嵌入在对话框中的弹出窗口是否可以(以可剪裁的方式)扩展到设备窗口边框?,android,dialog,popup,Android,Dialog,Popup,在对话活动中,我有一个弹出窗口连接到一个“按钮”(实际上是一个文本视图): AndroidManifest.xml <activity android:name="com.MyActivity" android:theme="@android:style/Theme.Dialog"/> 最后在dropDownView onClickListener()中: 它在我的文本视图下面很好地显示了一个下拉框。但是,弹出窗口被剪裁到对话框的边界(即,弹出窗口的下限在对话框

在对话活动中,我有一个弹出窗口连接到一个“按钮”(实际上是一个文本视图):

AndroidManifest.xml

<activity android:name="com.MyActivity"
          android:theme="@android:style/Theme.Dialog"/>
最后在dropDownView onClickListener()中:

它在我的文本视图下面很好地显示了一个下拉框。但是,弹出窗口被剪裁到对话框的边界(即,弹出窗口的下限在对话框的边缘结束,并启用滚动)。我可以设置以下各项:

popupWindow.setClippingEnabled(false);

这确实允许下拉列表扩展到对话框之外,但不幸的是也扩展到了窗口。有没有一种方法可以允许弹出窗口扩展到对话框之外,但受窗口的限制(从而在弹出窗口大于窗口时提供滚动)?

我终于找到了解决此问题的方法:

int[] location = new int[2];
view.getLocationOnScreen(location); //get physical location in Px
DisplayMetrics displaymetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenHeightPx = displaymetrics.heightPixels;
int maxHeight = screenHeightPx - location[1] - view.getHeight() - 20; 

PopupWindow popupWindow = new PopupWindow(this);
....
popupWindow.setHeight(maxHeight);
popupWindow.setClippingEnabled(false);
这里的关键是找到弹出窗口的锚定视图在屏幕上的位置。从屏幕的最大高度减去其y坐标,以获得从视图左上角到屏幕底部的距离。从这里,我去掉了锚定视图的高度(以获得底边的y坐标),最后再减去20个用于填充(应该首先将其转换为DP)

popupWindow.showAsDropDown(v, -5, 0);  //where v=dropDownView
popupWindow.setClippingEnabled(false);
int[] location = new int[2];
view.getLocationOnScreen(location); //get physical location in Px
DisplayMetrics displaymetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenHeightPx = displaymetrics.heightPixels;
int maxHeight = screenHeightPx - location[1] - view.getHeight() - 20; 

PopupWindow popupWindow = new PopupWindow(this);
....
popupWindow.setHeight(maxHeight);
popupWindow.setClippingEnabled(false);