我正在创建一个类似于这样的
但是我的弹出窗口有点偏左,而不是完全居中。我的视图处于横向模式,这是否与它有关?我尝试通过更改宽度和高度来解决,但没有成功。
ListPopupWindow
:final ListPopupWindow insidelistPopupWindow = new ListPopupWindow(view.getContext());
insidelistPopupWindow.setContentWidth(getResources().getDimensionPixelSize(R.dimen.popupNewWidth));
insidelistPopupWindow.setHeight(getResources().getDimensionPixelSize(R.dimen.size300dp));
insidelistPopupWindow.setVerticalOffset(getResources().getDimensionPixelSize(R.dimen.size0dp));
insidelistPopupWindow.setHorizontalOffset(getPoupHorizontalOffset());
//set adapter...
insidelistPopupWindow.setAnchorView(view);
insidelistPopupWindow.show();
我试图做简单的数学
public int getPoupHorizontalOffset() {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
return getResources().getDimensionPixelSize(R.dimen.popupNewWidth) - width/2;
}
如何通过编程简单地将某物水平居中?我曾经试过将其在手机上居中,但在其他手机上却没有效果,所以我怀疑我的假设有些问题。我还怀疑有更好的解决方法。
PS:相同的ListPopupWindow但具有不同数量的元素会被放置在屏幕上的不同位置。为什么会这样?
更新:
根据下面的答案,我尝试了
listPopupWindow.setAnchorView(view);
listPopupWindow.setContentWidth(getResources().getDimensionPixelSize(R.dimen.popupNewWidth));
listPopupWindow.setHeight(getResources().getDimensionPixelSize(R.dimen.size250dp));
listPopupWindow.setVerticalOffset(getResources().getDimensionPixelSize(R.dimen.size50dp));
listPopupWindow.setHorizontalOffset(listPopupWindowWidth(view, listPopupWindow));
listPopupWindow.setPromptPosition(ListPopupWindow.POSITION_PROMPT_ABOVE);
并且做了
int listPopupWindowWidth(View view, ListPopupWindow listPopupWindow) {
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int screenWidth = displayMetrics.widthPixels;
int horizontalOffset = (screenWidth / 2) - (getRelativeLeft(view) + listPopupWindow.getWidth() / 2);
return horizontalOffset;
}
private int getRelativeLeft(View view) {
if (view.getParent() == view.getRootView()) {
return view.getLeft();
} else {
return view.getLeft() + getRelativeLeft((View) view.getParent());
}
}
但是我的弹出窗口有点偏左,而不是完全居中。我的视图处于横向模式,这是否与它有关?我尝试通过更改宽度和高度来解决,但没有成功。