Androidで、ビューの位置をpx単位で正確に指定したい時の方法。
ゲームアプリの広告表示の場合、
ゲーム部分はフレームワークが自動で拡大縮小してスクリーンサイズに合わせているため、
Androidのxmlでレイアウト指定するものと併せられない。
そこでpxを計算して表示することになる。
方針としては、marginでpx指定することになる。
//スクリーンサイズ取得
WindowManager wm = getWindowManager();
Display disp = wm.getDefaultDisplay();
//座標を計算
int bottomMargin = 1.0 * 120 / VIRTUAL_SCREEN_HEIGHT * disp.getHeight();
//MarginLayoutParamsにセット
View view = MainActivity.this.findViewById(R.id.view); //このビューはxmlでlayout_alignParentBottom="true"になっている想定(ので、bottomMarginが効く)
android.view.ViewGroup.MarginLayoutParams viewMargin = (android.view.ViewGroup.MarginLayoutParams)view.getLayoutParams();
viewMargin.bottomMargin = bottomMargin; //ここで指定
view.setLayoutParams(viewMargin);
ポイントとしては、
「pxでの指定」になること(dpではない)
途中計算で使っているdisp.getHeight()はpxの値が返ってくる。
また、MarginLayoutParams.bottomMarginもpx指定となっている。(top,left,rightも同様)
PR