使用流布局實現熱門標籤和多選

2021-07-11 07:25:10 字數 1910 閱讀 9599

終於能在週末裡找個時間整理下專案中用到的知識點了。最近專案中用到多選的乙個功能,資料還是**於介面,動態的進行標籤的布局。像這種組合檢視,毫無疑問,這裡要用到viewgroup,為此記錄下布局時思考的邏輯。那麼首先來自定義乙個view,繼承viewgroup

這裡要重點介紹下,自定義view,難免要重寫onmeasure()和onlayout()這兩個方法,前者是為了計算每個子view的大小的,最後得出整個容器的大小,後者時為了布局每個子view的位置。完整的**在最後給出。

@override

protected

void onmeasure(int widthmeasurespec, int heightmeasurespec) else

//換行判斷

if (x > maxwidth) }}

// 設定容器所需的最大寬度和所需的高度

setmeasureddimension(maxwidth, y);

}

measurespec在計算檢視的大小時,提供了三種模式,如下:

exactly:表示設定了精確的值,一般當childview設定其寬、高為精確值、match_parent時,viewgroup會將其設定為exactly;

at_most:表示子布局被限制在乙個最大值內,一般當childview設定其寬、高為wrap_content時,viewgroup會將其設定為at_most;

unspecified:表示子布局想要多大就多大,一般出現在aadapterview的item的heightmode中、scrollview的childview的heightmode中;此種模式比較少見。

好了計算完子view所在容器的大小之後,需要計算子view的位置了,這裡要用到viewgroup的onlayout方法如下:

@override

protected

void

onlayout(boolean changed, int l, int t, int r, int b)

x += width+left;

if (row==0) else

if (x > maxwidth)

child.layout(x - width, y - height, x, y);}}

}}

**中大致意思就不說了,跟onmeasure()中差不離兒,在最後貼出整個自定義view**:

/**

* 流式布局的radiogroup

*/public

class

flowviewgroup

extends

viewgroup

public

flowviewgroup(context context, attributeset attrs)

@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec) else

if (x > maxwidth) }}

// 設定容器所需的寬度和高度

setmeasureddimension(maxwidth, y);

}@override

protected

void

onlayout(boolean changed, int l, int t, int r, int b)

x += width+left;

if (row==0) else

if (x > maxwidth)

child.layout(x - width, y - height, x, y);}}

}}

自定義Android流布局實現推薦標籤功能

之前遇到需要用自動換行的流布局來實現推薦標籤的功能,當時為這個問題弄得焦頭爛額,找了好多 都沒能完美解決這個問題,不過最終還是搞定了。我想要實現的就是這種效果,最開始是用的linearlayout布局,但發現當標籤過多時沒辦法自動換行,沒辦法只能自定義控制項來實現了。下面直接上 public cla...

vim中多標籤和多視窗的使用

用vim進行編輯的時候常常因為要編輯多個檔案或者是編輯乙個檔案要參考其他檔案而煩惱,這裡介紹兩種方法 1.多標籤 vim p 要編輯的檔名 如vim p 就是編輯當前目錄的所有檔案 多個標籤間進行切換時向右切換gt,向左切換用gt 在編輯的時候想增加乙個標籤就可以 tabnew filename t...

使用CSS3實現多列布局與多背景的技巧

多列布局 css多列布局繼承自塊級布局模式,允許簡單地定義多列文字。一行太長的文字讀起來很麻煩 當人眼從一行過長的文字末端移動到下一行開始處,就容易弄錯到底該讀哪一行。因此,為了最優化使用大的顯示螢幕,設計者應該限制文字段落的寬度而併排排列,就像報紙一樣。糟糕的是如果不使用css和html在特定的位...