我知道如何使用layoutParams的gravity属性使imageView居中。但是,我正试图让它以它的边缘为中心。如果图像的宽度为w且显示窗口的宽度为W,我的猜测是leftMargin = rightMargin = W / 2 - w / 2。同样,topMargin = bottomMargin = H / 2 - h / 2。结果是imageView水平居中但没有垂直居中。这是代码:
// new layout, blue background
FrameLayout root = new FrameLayout(this);
root.setBackgroundColor(getResources().getColor(R.color.blue));
// window dimensions
Point window = new Point();
getWindowManager().getDefaultDisplay().getSize(window);
// imageView with bitmap
ImageView img = new ImageView(this);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.square);
img.setImageBitmap(bm);
// imageView layout params
int w = bm.getWidth();
int h = bm.getHeight();
FrameLayout.LayoutParams p = new FrameLayout.LayoutParams(w, h);
p.setMargins(window.x/2 - w/2, window.y/2 - h/2, window.x/2 - w/2, window.y/2 - h/2);
img.setLayoutParams(p);
// add image to root layout
root.addView(img);
// set layout as main layout
setContentView(root);
如果状态栏和标题栏被隐藏,那么图像就会居中,所以我想有一些显示窗口大小。
答案 0 :(得分:1)
您的问题是您获得整个设备屏幕的大小,其中包括显示通知和标题栏的所有像素(视图水平而非垂直居中的原因)。要解决这个问题,你应该抓住根视图的高度而不是设备屏幕,那么你的居中方法就可以了。
要获得根视图的大小,您可以使用this post
中的代码