Android 使用者介面—Android如何描畫View(How Android Draws Views)

來源:互聯網
上載者:User

當Activity收到焦點時,就會請求描畫它的布局。Android架構將處理這個描畫過程,但是Activity必須提供它的布局層次的跟節點。

描畫從布局的根節點開始。它要度量和描畫布局樹。描畫是通過遍曆整個布局樹來處理的,並在遍曆過程中呈現每個與無效地區相交的View對象。每個ViewGroup依次負責請求它的每個子View進行描畫(使用draw()方法),每個View對象負責描畫自己。因為布局樹是依次遍曆的,這就意味著父節點將在它的子節點之前進行描畫,而同級節點則會按照它們在樹中的顯示順序來描畫。

描畫布局有兩個過程:度量和布局。度量過程是在measure(int, int)方法中實現的,它是一個自上而下的遍曆過程。在遞迴期間,每個View都會把它的尺寸規格向下傳遞。在度量過程的最後,每個View對象都會儲存它們自己的尺寸。版面配置階段是發生在layout(int,
int, int, int)方法中,並且它也是自上而下的過程,在這個過程期間,每個父容器都會使用在度量過程中計算的尺寸來定位它的子物件。

當一個View對象的measure()方法返回時,它的getMeasuredWidth()和getMeasuredHeight()方法(包括這個View對象所包含的所有的子物件)的傳回值必須是有意義的。一個View對象的度量寬度和度量高度必須嚴格遵守它的父容器的約束。這樣就保證了在度量過程結束後,所有的父容器都能接收它們所有的子節點的尺寸。一個父View對象可以多次調用它子節點的measure()方法。例如,在未度量尺寸之前,父View先對每個子節點度量一次,以便發現它們所需要的大小,如果它的所有的子節點的未被約束之前的尺寸太多或太小,那麼父節點就會在調用一次measure()方法,並分配給它們實際的大小(如果子節點所獲得的空間不能滿足自身的需要,那麼父節點就介入並設定規則,然後進行第二次遍曆)。

度量過程使用兩個類來傳遞尺寸。View.MeasureSpec類用於告訴它們的父節點,它們想要如何度量和定位。LayoutParams類則用於描述View對象想要的寬度和高度。每個尺寸,都可以使用下列方式之一來指定:

1.  精確的數字

2.  FILL_PARENT:這意味著View對象想要跟它的父容器一樣大(減去邊距)

3.  WRAP_CONTENT:這意味著View對象只想要跟它的內容相匹配的空間(加上邊距)

不同的ViewGroup子類會有對應的LayoutParams子類,如,RelativeLayout就有它自己的LayoutParams子類,它包含了讓它的子View水平和垂直置中的能力。

MeasureSpecs類用於把要求從父節點向下傳給子節點。MeasureSpec可以是以下三種模式之一:

1.  UNSPECIFIED:

父節點使用這種模式來確定它的子節點所期望的尺寸。如,LinearLayout可以調用一個高度設定為UNSPECIFIED、寬度設定設定為EXACTLY 240的子節點的measure()方法,來度量給定寬度為240像素的View對象的高度。

2.  EXACTLY:

父節點使用這種模式來強制設定子節點的精確尺寸,子節點必須使用這個尺寸,並且保證它的所有的子節點都適應這個尺寸。

3.  AT_MOST:

父節點使用這種模式強制子節點使用最大的尺寸。位元組點必須保證它和它的所有的子節點都適應這個尺寸。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.