【发布时间】:2020-07-17 17:32:45
【问题描述】:
我正在像这样创建一个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());
}
}
但我的弹出窗口稍微偏左,不完全居中。我的视图处于横向模式,与它有什么关系吗?我试过按高度改变宽度,但没有用
【问题讨论】:
标签: java android android-layout