我在对话框活动中有一个弹出窗口附加到'按钮'(嗯,真的是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);
这确实允许下拉列表扩展到对话框之外,但遗憾的是窗口。有没有办法允许弹出窗口扩展到对话框之外但是被窗口限制(因此当弹出窗口大于窗口时提供滚动)?
答案 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)。