2011-03-15 41 views
2

我一直試圖將這個自定義視圖居中放在這個擴展了LinearLayout的其他自定義視圖中。這一切都需要通過代碼完成,因爲它全部在運行時完成。安卓重力問題

我試過的標準方法與設置重力:

this.setGravity(Gravity.CENTER); 

那是我的類,它擴展的LinearLayout內完成。

我也試過的LayoutParams方法:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    params.gravity = Gravity.CENTER; 
    block.setLayoutParams(params); 
    this.addView(block); 

這是在我的模塊添加到視圖(因爲你可以看到)的地方進行。

兩種方法都導致塊仍然在我視圖的左上角對齊。我的其他選擇還有什麼,或者更重要的是,我在做什麼錯了?

回答

5

嘗試還設置佈局重量:

LinearLayout.LayoutParams params = 
    new LinearLayout.LayoutParams(
     LayoutParams.FILL_PARENT, 
     LayoutParams.WRAP_CONTENT); 
params.gravity = Gravity.CENTER_HORIZONTAL; 
params.weight = 1; 
this.addView(block, params); 

這(假設你的方向是垂直的)可以讓你的看法,以填補剩餘的空間線性佈局,應該水平居中。

我不認爲有一種方法可以使視圖子項比包含它的LinearLayout單元更小。如果視圖比它的「單元格」小,那麼LinearLayout將縮小以適應它。如果佈局權重導致「單元格」增長,則包含的視圖也會增長。

如果您確實希望視圖小於其「單元格」並居中,請將其包裝在FrameLayout中。然後,您將能夠使用中心重力來處理您的內容。 layout_width =「FILL_PARENT」 XML(可我知道你不能直接使用這個,但它更容易解釋這樣):

<LinearLayout orientation="vertical"> 
    <FrameLayout layout_weight="1" layout_height="wrap_content"> 
     <View layout_gravity="center" layout_{width,height}="wrap_content"/> 
    </FrameLayout> 
     ... other views ... 
</LinearLayout> 

無標誌的佈局屬性是「FILL_PARENT」。

+0

嘗試你的第一個代碼示例產生了我仍然遇到的相同結果。感覺好像我應用到自定義LinearLayout和自定義視圖的所有這些屬性都被忽略了。 – 2011-03-17 04:03:27