PopupWindow.showAtLocation(View parent,int gravity,int x,int y)未在GridView的指定位置显示

时间:2017-01-23 10:35:32

标签: android gridview android-gridview android-popupwindow

我面临popupWindow.showAtLocation(View parent, int gravity, int x, int y)问题,这里x轴工作正常,但它不会在y轴上移动。弹出窗口仍然显示在活动之上,但它精确地定位在左侧或右侧位置。我使用GridView作为父视图,我认为GridView存在一些问题,但我没有'我不知道那个问题是什么&如何解决它。 请有人帮助我。

下面是我的代码:

final GridView gridView = (GridView)inflater.inflate(R.layout.popup_window, null, false);
gridView.setNumColumns(5);
gridView.setVerticalSpacing(50);

PopupAdapter adapter = new PopupAdapter(this, iconIds, subjectNames);
gridView.setAdapter(adapter);

popupWindow = new PopupWindow(gridView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, false);

findViewById(R.id.open_popup_btn).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v)
    {
        if(!popupWindow.isShowing()) {
            popupWindow.showAtLocation(gridView, Gravity.NO_GRAVITY, 100, 400);
        }
        else
            popupWindow.dismiss();
    }
});

以下是 popup_window.xml

的代码
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/grid_view">

</GridView>

1 个答案:

答案 0 :(得分:0)

我刚刚检查了你的代码,弹出窗口沿着y轴移动。只是为了让你知道在所有屏幕上看起来均匀,你应该使用以下方法。

popupWindow.showAtLocation(gridView, Gravity.NO_GRAVITY,convertDpToPx(100), convertDpToPx(400));


private int convertDpToPx(int dp){
    return   (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

希望这有帮助!