0

問題是,我想以編程方式將TAGS(如帖子底部的那些標籤)添加到我的屏幕視圖中。數量將是未知數,但在10範圍內可以說。我知道我可以使用水平列表視圖,但我不知道如何以及是否可以將不合適的標籤包裝到下一行。我不認爲這是可能的。接下來,使用Gridview是一個選項,但是如何爲每個標籤分配水平空間(如果它們具有不同的長度)呢?是否有任何方法可以在不知道數量的情況下連續列出它們並動態地將它們包裝到「下一行」?Android根據其大小動態列出行中的項目

回答

1

最近我不得不裸露類似於你問的東西。我最終決定使用TableView,並動態構建TableRow。這看起來不錯,直到我遇到了如何知道何時將新項目添加到現有的TableRow或將該行添加到TableView並開始新的項目的問題。

一種解決方法(有的甚至可以稱之爲黑客攻擊),我特別不喜歡,但工作原理是如下:措施屏幕的寬度,使用這樣的代碼:

final Display display = getWindowManager().getDefaultDisplay(); 
final Point size = new Point(); 
display.getSize(size); 

final WindowManager.LayoutParams params = getWindow().getAttributes(); 

你」您將能夠在params.width參數內獲得屏幕寬度。我刪除了0.95而不是嚴格適合行,主要是因爲它可能工作不正確。

所以現在,你需要有一個循環來處理你想要添加的所有項目,讓我們假設它們是TextView s。保持已添加的寬度的數量,如果新項目的寬度超過寬度,請將其添加到下一行。

totalwidth = 0; 
for (TextView tv : myTVitems) { 
    if (totalwidth + tv.getWidth() < parameters.width * 0.95) { 
    // Add it to the existing row 
    totalwidth += tv.getWidth(); 
    } 
    else { 
    // Add the `TableRow` to the `TableView` and start a new `TableRow` 
    totalwidth = 0; 
    } 
} 

我從內存中寫這個,所以沒有任何明確的轉換就不能編譯,但這就是主意。

+0

我假設,例如從錶行中刪除項目,我只是重申內容重繪更新的版本? –

+0

使用這種方法,您不需要刪除任何內容,在決定是將它添加到當前行還是通過將其添加到表中並開始填充新行來完成它的每一步中。但是,您可以在需要時刪除它。 – nKn

相關問題