【问题标题】:Can a popup window embedded in a dialog expand (in a clipable way) to the device window border?嵌入在对话框中的弹出窗口是否可以(以可剪辑的方式)扩展到设备窗口边框?
【发布时间】:2013-11-18 10:32:15
【问题描述】:

我有一个弹出窗口附加到对话框活动中的“按钮”(实际上是 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>

我的活动:

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

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

【问题讨论】:

    标签: android dialog popup


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 2021-09-13
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多