自定義控制項格仔布局 CellLayout

2022-10-09 05:48:11 字數 2832 閱讀 6104

格仔布局,支援正方形的子view,可用來做九宮格,十六宮格,只需改變列數就行了,也支援非正方形子view.主要是可以自動分配寬度,這才是正點。

看下效果吧:

二話不說上**:

自定義三個屬性

<?xml version="1.0" encoding="utf-8"?>

自定義viewgroup實現格仔布局
/**

* * @classname:celllayout

* @packagename:com.nevermore.squarecelllayout

* @create on 2017/6/25 11:36

* @author:xuchuanting

*/public class celllayout extends viewgroup

public celllayout(context context, attributeset attrs)

public celllayout(context context, attributeset attrs, int defstyleattr)

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)

//測量子view

measurechild(child, widthmeasurespec, heightmeasurespec);

int childmeasuredheight = child.getmeasuredheight();

//儲存子view寬高

child.measure(getchildmeasurespec(widthmeasurespec, getpaddingleft()+getpaddingright(), cellwidth),

getchildmeasurespec(heightmeasurespec, 0, issquaremode ? cellwidth : childmeasuredheight));

//記錄每一行的最大高度

if (!issquaremode)

//測量到一行的最後乙個child儲存該行的最大高度

if ((i + 1) % columcount == 0 || i == childcount - 1) }}

//總行高

int totalrowheight = 0;

int rowcount = getrowcount();//行數

if (issquaremode) else

}int heightsize = space * (rowcount - 1) + totalrowheight+getpaddingtop()+getpaddingbottom();

setmeasureddimension(widthsize, heightsize);

}/**

* 獲取行數

*/public int getrowcount()

/*** 獲取child所在的行數

* 從第0行算

** @param childindex

* @return

*/public int getrowindex(int childindex)

/*** 獲取總列數

** @return

*/public int getcolumcount()

/*** 獲取每格寬度

** @return

*/public int getcellwidth()

@override

protected void onlayout(boolean changed, int l, int t, int r, int b) else }}

public inte***ce onitemclicklistener

@override

public void removeviewat(int index)

}private onitemclicklistener onitemclicklistener;

/*** 寫個介面卡簡化一下新增view

* 暫不支援**

* @param adapter

*/public void setadapter(baseadapter adapter)

removeallviews();

for (int i = 0; i < adapter.getcount(); i++)

}/**

* item的點選事件

** @param listener

*/public void setonitemclicklistener(final onitemclicklistener listener)

this.onitemclicklistener = listener;

for (int i = 0; i < getchildcount(); i++)

});}}}

github位址

自定義布局控制項

本文介紹一種自定義控制項的方法,由控制項布局和控制項 2部分組成。效果為乙個自定義標題欄,由乙個按鈕 乙個文字 乙個按鈕組成,並定義了各子件的事件。一 title布局如下 二 如下。重寫構造器,在其中展開布局,找到子控制項繫結事件 public class titlelayout extends l...

自定義組合控制項 來自布局

閒來無事,擼一集 看見大神些的公正的 我真是汗顏了 難以望其項背 雖不能至,心嚮往之 我就是個文科生轉世 包拯投錯胎 我算不算 猿類當中最能扯的?寫道這裡突然感覺好簡單了啊 主要是填充布局,找到各個子控制項.控制項太多可以放在乙個集合中.控制項的屬性神馬的可以放在乙個二維陣列中.主要是操作這個控制項...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...