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

时间:2013-11-06 23:07:42

标签: android dialog popup

我在对话框活动中有一个弹出窗口附加到'按钮'(嗯,真的是TextView):

的AndroidManifest.xml

<activity android:name="com.MyActivity"
          android:theme="@android:style/Theme.Dialog"/>

my_activity_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="290dp"
    android:layout_height="200dp"
    android:orientation="vertical" >

    etc...

</LinearLayout>

MyActivity:

PopupWindow popupWindow = new PopupWindow(this);
popupWindow.setWidth(250);
popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);

TextView dropDownView = findViewById(R.id.dropDownView);

最后在dropDownView onClickListener():

popupWindow.showAsDropDown(v, -5, 0);  //where v=dropDownView

很好地显示了TextView下面的下拉框。但是,弹出窗口被剪切到对话框的边界(即弹出窗口的下限在对话框的边缘结束并且启用滚动)。我可以设置以下内容:

popupWindow.setClippingEnabled(false);

这确实允许下拉列表扩展到对话框之外,但遗憾的是窗口。有没有办法允许弹出窗口扩展到对话框之外但是被窗口限制(因此当弹出窗口大于窗口时提供滚动)?

1 个答案:

答案 0 :(得分:2)

好吧,我终于找到了解决这个问题的方法:

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)。