格仔布局,支援正方形的子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...