私のアプリにはいくつかのポップアップがあります。フルスクリーンで、次のコードです:
content.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
content.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
int screenWidth = windowManager.getDefaultDisplay().getWidth();
int screenHeight = windowManager.getDefaultDisplay().getHeight();
int x = screenWidth / 2 - content.getMeasuredWidth() / 2;
int y = screenHeight / 2 - content.getMeasuredHeight() / 2;
window.showAtLocation(content, Gravity.NO_GRAVITY, x, y);
ウィンドウを中央に表示します。
しかし、フルスクリーンではない別のアクティビティがあります。ポップアップが開くと、必要な場所から右下に表示されます。
これが発生する理由を理解しようとすると、showAtLocationは現在のアクティビティに関連するものを示していると思いますが、ディスプレイに関連するものを表示する必要があります。
どうやってやるの?または、ポップアップをちょうど中央に置く簡単な方法がありますか?
popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0);
これにより、ビューが中央に配置されます。
これを理解するのに2時間かかりました。これを処理するのに黒魔術は必要ありませんでした。
ビューはウィンドウトークンにのみ必要であり、他の場所には影響しません。
Gravityは、レイアウトマネージャーに座標系の開始位置とそれらの座標の処理方法を指示します。私はドキュメントを見つけることができませんが、ハッキングは私にそれを示しています:
これをここに書きました Android PopupWindow.showAtLocation()およびGravityの効果
View popupView = layoutInflater.inflate(R.layout.index_popviewxml,
null);
final PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, true);
popupWindow.setTouchable(true);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);