2013-07-17 61 views
0

我知道如何使用其layoutParams的重力屬性將imageView居中。不過,我試圖讓它集中在邊緣遊戲中。如果圖像的寬度爲w,顯示窗口的寬度爲W,我的猜測是leftMargin = rightMargin = W/2 - w/2。同樣,topMargin = bottomMargin = H/2 - h/2。結果是imageView水平居中,但沒有垂直居中。下面的代碼:爲什麼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); 

如果狀態欄和標題欄被隱藏,則圖像被集中,所以我想有什麼東西與顯示窗口的大小。

回答

1

您的問題是,您正在獲取整個設備屏幕的大小,其中包括顯示通知和標題欄的所有像素(視圖水平居中而非垂直居中的原因)。爲了解決這個問題,你應該抓取根視圖的高度而不是設備屏幕,然後你的對中方法就可以工作。

要獲得根視圖的大小,您可以使用this post的代碼

+0

是的。就是這樣。我不明白爲什麼API不提供另一種方式來捕捉佈局高度 – marc