2011-03-31 105 views
0

我需要創建一個完美的方形TableLayout。該表格是具有相同大小物體的網格。這裏的問題是,在景觀佈局中,桌子應該佔用最大的空間量,但僅此而已。換句話說,我需要表格的寬度等於允許的最大高度。廣告在活動開始後大約10秒左右出現,這也增加了複雜性。Android - Square TableLayout

這是我到目前爲止已經試過來實現:

  • 我創建的是水平排列的中心隱形視圖。然後,我將桌子的右側對齊到這個視圖。這種方法可行,但對於某些設備而言,屏幕比例並不能使此設置完美。在像機器人這樣的設備上,由於表格的寬度小於高度,所以底部的行被放入。
  • 我創建了一個ImageView,其中adjustViewBounds設置爲true。我用一個非常大的方形圖片來源。我已將它設置爲在adView上方並對齊頂部並對齊左側。然後,我將表格佈局設置爲與該ImageView的邊界對齊。這不起作用,因爲它是一個記憶豬,並且當廣告彈出時圖像邊界從未完全調整過。圖像源將轉到較小的縮放廣場,但右邊界從未調整到新邊界。

我認爲這可能是非常容易的,如果我做了一個TableLayout的自定義類並設置tablewidth = tableheight。我正在爲這個想法苦苦掙扎,因爲我不知道我需要什麼地方放置必要的邏輯。我想我需要在表格初始繪製時添加它,並且在廣告移動到位後再次調整表格。

有人可以幫助一些示例代碼在TableLayout類?有沒有另一種方法來做到這一點?

更新3/30 9:05 PM PST

我已經通過從CommonsWare建議看後做出一個自定義TableLayout類的一些進展。我更接近使用這個類來實現解決方案,但還有一件事要解決。新的TableLayout不會調整它的邊界,因此即使內容大小正確,寬度仍佔用額外的空間。寬度看起來是在沒有廣告時設置的,並且在此之後從未改變。

這是我非常簡單的擴展TableLayout類。注意其中I設定的寬度和高度都等於高度的onMeasure方法:

public class SquareTableLayout extends TableLayout { 

    public SquareTableLayout(Context context) { 
     super(context); 
    } 
    public SquareTableLayout (Context context, AttributeSet attrs) { super(context, attrs); } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(heightMeasureSpec, heightMeasureSpec); 
    } 
} 

這是問題的屏幕截圖。我在TableLayout中添加了一些背景來突出顯示問題。

http://ribzy.com/images/tile_takedown_landscape.png

回答

1

TableLayout不能完成你所追求的,因爲你已經確定的原因。沒有將寬度和高度連接在一起的內置佈局。很可能,您需要從頭開始創建自定義佈局管理器,like this one