欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android View.onMeasure方法詳解及實(shí)例

 更新時(shí)間:2017年05月06日 16:44:23   投稿:lqh  
這篇文章主要介紹了Android View.onMeasure方法詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下

Android View.onMeasure方法詳解及實(shí)例

View在屏幕上顯示出來(lái)要先經(jīng)過measure(計(jì)算)和layout(布局).

1、什么時(shí)候調(diào)用onMeasure方法?

當(dāng)控件的父元素正要放置該控件時(shí)調(diào)用.父元素會(huì)問子控件一個(gè)問題,“你想要用多大地方啊?”,然后傳入兩個(gè)參數(shù)——widthMeasureSpec和heightMeasureSpec.

這兩個(gè)參數(shù)指明控件可獲得的空間以及關(guān)于這個(gè)空間描述的元數(shù)據(jù).

更好的方法是你傳遞View的高度和寬度到setMeasuredDimension方法里,這樣可以直接告訴父控件,需要多大地方放置子控件.

  接下來(lái)的代碼片段給出了如何重寫onMeasure.注意,調(diào)用的本地空方法是來(lái)計(jì)算高度和寬度的.它們會(huì)譯解widthHeightSpec和heightMeasureSpec值,并計(jì)算出合適的高度和寬度值.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int measuredHeight = measureHeight(heightMeasureSpec);
int measuredWidth = measureWidth(widthMeasureSpec);
setMeasuredDimension(measuredHeight, measuredWidth);
}

private int measureHeight(int measureSpec) {


// Return measured widget height.
}

private int measureWidth(int measureSpec) {

// Return measured widget width.
}

邊界參數(shù)——widthMeasureSpec和heightMeasureSpec ,效率的原因以整數(shù)的方式傳入。在它們使用之前,首先要做的是使用MeasureSpec類的靜態(tài)方法getMode和getSize來(lái)譯解,如下面的片段所示:

int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);

依據(jù)specMode的值,(MeasureSpec有3種模式分別是UNSPECIFIED, EXACTLY和AT_MOST)

  • 如果是AT_MOST,specSize 代表的是最大可獲得的空間;
  • 如果是EXACTLY,specSize 代表的是精確的尺寸;
  • 如果是UNSPECIFIED,對(duì)于控件尺寸來(lái)說,沒有任何參考意義。

2、那么這些模式和我們平時(shí)設(shè)置的layout參數(shù)fill_parent, wrap_content有什么關(guān)系呢?

經(jīng)過代碼測(cè)試就知道,當(dāng)我們?cè)O(shè)置width或height為fill_parent時(shí),容器在布局時(shí)調(diào)用子 view的measure方法傳入的模式是EXACTLY,因?yàn)樽觱iew會(huì)占據(jù)剩余容器的空間,所以它大小是確定的。

而當(dāng)設(shè)置為 wrap_content時(shí),容器傳進(jìn)去的是AT_MOST, 表示子view的大小最多是多少,這樣子view會(huì)根據(jù)這個(gè)上限來(lái)設(shè)置自己的尺寸。當(dāng)子view的大小設(shè)置為精確值時(shí),容器傳入的是EXACTLY, 而MeasureSpec的UNSPECIFIED模式目前還沒有發(fā)現(xiàn)在什么情況下使用。 

   View的onMeasure方法默認(rèn)行為是當(dāng)模式為UNSPECIFIED時(shí),設(shè)置尺寸為mMinWidth(通常為0)或者背景drawable的最小尺寸,當(dāng)模式為EXACTLY或者AT_MOST時(shí),尺寸設(shè)置為傳入的MeasureSpec的大小。 

   有個(gè)觀念需要糾正的是,fill_parent應(yīng)該是子view會(huì)占據(jù)剩下容器的空間,而不會(huì)覆蓋前面已布局好的其他view空間,當(dāng)然后面布局子 view就沒有空間給分配了,所以fill_parent屬性對(duì)布局順序很重要。以前所想的是把所有容器的空間都占滿了,難怪google在2.2版本里把fill_parent的名字改為match_parent.

  在兩種情況下,你必須絕對(duì)的處理這些限制。在一些情況下,它可能會(huì)返回超出這些限制的尺寸,在這種情況下,你可以讓父元素選擇如何對(duì)待超出的View,使用裁剪還是滾動(dòng)等技術(shù)。

  接下來(lái)的框架代碼給出了處理View測(cè)量的典型實(shí)現(xiàn):

java代碼:

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int measuredHeight = measureHeight(heightMeasureSpec);

int measuredWidth = measureWidth(widthMeasureSpec);

setMeasuredDimension(measuredHeight, measuredWidth);

}

private int measureHeight(int measureSpec) {

int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);

// Default size if no limits are specified.

int result = 500;
if (specMode == MeasureSpec.AT_MOST){

// Calculate the ideal size of your
// control within this maximum size.
// If your control fills the available
// space return the outer bound.

result = specSize;
}
else if (specMode == MeasureSpec.EXACTLY){

// If your control can fit within these bounds return that value.
result = specSize;
}

return result;
}

private int measureWidth(int measureSpec) {
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);

// Default size if no limits are specified.
int result = 500;
if (specMode == MeasureSpec.AT_MOST){
// Calculate the ideal size of your control
// within this maximum size.
// If your control fills the available space
// return the outer bound.
result = specSize;
}

else if (specMode == MeasureSpec.EXACTLY){
// If your control can fit within these bounds return that value.

result = specSize;
}

return result;
}

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Android EditText限制輸入整數(shù)和小數(shù)的位數(shù)的方法示例

    Android EditText限制輸入整數(shù)和小數(shù)的位數(shù)的方法示例

    這篇文章主要介紹了Android EditText限制輸入整數(shù)和小數(shù)的位數(shù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-08-08
  • Android Studio IDE升級(jí)4.1以后Start Failed

    Android Studio IDE升級(jí)4.1以后Start Failed

    這篇文章主要介紹了Android Studio IDE升級(jí)4.1以后Start Failed,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Android獲取設(shè)備傳感器的方法

    Android獲取設(shè)備傳感器的方法

    這篇文章主要為大家詳細(xì)介紹了Android獲取設(shè)備傳感器的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Android中使用tcpdump、wireshark進(jìn)行抓包并分析技術(shù)介紹

    Android中使用tcpdump、wireshark進(jìn)行抓包并分析技術(shù)介紹

    這篇文章主要介紹了Android中使用tcpdump、wireshark進(jìn)行抓包并分析技術(shù)介紹,本文講解了下載并安裝tcpdump、pc上安裝wireshark等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android自定義View九宮格手勢(shì)密碼解鎖

    Android自定義View九宮格手勢(shì)密碼解鎖

    這篇文章主要為大家詳細(xì)介紹了Android自定義View九宮格手勢(shì)密碼解鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • MobLink Android端業(yè)務(wù)場(chǎng)景簡(jiǎn)單說明

    MobLink Android端業(yè)務(wù)場(chǎng)景簡(jiǎn)單說明

    這篇文章主要介紹了MobLink Android端業(yè)務(wù)場(chǎng)景簡(jiǎn)單說明,MobLink的功能實(shí)現(xiàn)就是在分享前會(huì)將鏈接的參數(shù)信息保存到服務(wù)器,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • 實(shí)例講解Android中SQLiteDatabase使用方法

    實(shí)例講解Android中SQLiteDatabase使用方法

    這篇文章主要以一個(gè)簡(jiǎn)單的實(shí)例為大家詳細(xì)講解Android中SQLiteDatabase使用方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Flutter學(xué)習(xí)之實(shí)現(xiàn)自定義themes詳解

    Flutter學(xué)習(xí)之實(shí)現(xiàn)自定義themes詳解

    一般情況下我們?cè)趂lutter中搭建的app基本上都是用的是MaterialApp這種設(shè)計(jì)模式,MaterialApp中為我們接下來(lái)使用的按鈕,菜單等提供了統(tǒng)一的樣式,那么這種樣式能不能進(jìn)行修改或者自定義呢?答案是肯定的,一起來(lái)看看吧
    2023-03-03
  • Android隨手筆記44之JSON數(shù)據(jù)解析

    Android隨手筆記44之JSON數(shù)據(jù)解析

    本文將主要介紹在Android開發(fā)中,如何在服務(wù)器端創(chuàng)建JSON數(shù)據(jù),以及如何在Android客戶端對(duì)JSON數(shù)據(jù)進(jìn)行解析,對(duì)android json解析 相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Android實(shí)現(xiàn)簡(jiǎn)單畫中畫功能

    Android實(shí)現(xiàn)簡(jiǎn)單畫中畫功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單畫中畫功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論