一般來說,自定義控件都會(huì)去重寫View的onMeasure方法,因?yàn)樵摲椒ㄖ付ㄔ摽丶谄聊簧系拇笮 ?/p>
創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為東風(fēng)等服務(wù)建站,東風(fēng)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為東風(fēng)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
onMeasure傳入的兩個(gè)參數(shù)是由上一層控件傳入的大小,有多種情況,重寫該方法時(shí)需要對(duì)計(jì)算控件的實(shí)際大小,然后調(diào)用setMeasuredDimension(int, int)設(shè)置實(shí)際大小。
onMeasure傳入的widthMeasureSpec和heightMeasureSpec不是一般的尺寸數(shù)值,而是將模式和尺寸組合在一起的數(shù)值。我們需要通過int mode = MeasureSpec.getMode(widthMeasureSpec)得到模式,用int size = MeasureSpec.getSize(widthMeasureSpec)得到尺寸。
mode共有三種情況,取值分別為MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST。
1、MeasureSpec.EXACTLY是精確尺寸,當(dāng)我們將控件的layout_width或layout_height指定為具體數(shù)值時(shí)如andorid:layout_width="50dip",或者為FILL_PARENT是,都是控件大小已經(jīng)確定的情況,都是精確尺寸。
2、MeasureSpec.AT_MOST是大尺寸,當(dāng)控件的layout_width或layout_height指定為WRAP_CONTENT時(shí),控件大小一般隨著控件的子空間或內(nèi)容進(jìn)行變化,此時(shí)控件尺寸只要不超過父控件允許的大尺寸即可。因此,此時(shí)的mode是AT_MOST,size給出了父控件允許的大尺寸。
3、MeasureSpec.UNSPECIFIED是未指定尺寸,這種情況不多,一般都是父控件是AdapterView,通過measure方法傳入的模式。
方法有:
//這個(gè)是由我們給出的尺寸大小和模式生成一個(gè)包含這兩個(gè)信息的int變量,這里這個(gè) 模式這個(gè)參數(shù),傳三個(gè)常量中的一個(gè)。
public static int makeMeasureSpec(int size, int mode)
//這個(gè)是得到這個(gè)變量中表示的模式信息,將得到的值與三個(gè)常量進(jìn)行比較。
public static int getMode(int measureSpec)
//這個(gè)是得到這個(gè)變量中表示的尺寸大小的值。
public static int getSize(int measureSpec)
//把這個(gè)變量里面的模式和大小組成字符串返回來,方便打日志
public static String toString(int measureSpec)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。