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