編輯:Android開發實例
當一個活動接收到焦點時,它將被要求繪制它的布局。Android框架將處理這個繪畫的過程,但是活動必須提供它的布局層次的根節點。
繪畫從布局的根節點開始。它被要求來測量和繪制布局樹。繪畫通過遍歷布局樹並渲染每個和失效區域相交的視圖來處理。相應的,每個視圖組負責請求繪制它的子視圖(通過draw() 方法)而每個視圖負責畫它自己。因為這個樹是順序遍歷的,這意味著先畫父節點(也就是在屏幕後面),然後按照樹中出現的順序畫其同層次節點。
框架將不會畫不在失效區域的視圖,而且還將會幫你畫視圖背景。
你可以強制一個視圖被重畫,通過調用invalidate()。
繪畫布局共有兩步:一個度量過程和一個布局過程。度量過程在measure(int, int)裡實現且是一個自頂向下的視圖樹遍歷。每個視圖在遞歸時往下推送尺寸規格。在度量過程的最後,每個視圖都已經保存了自己的度量。第二個過程發生在layout(int, int, int, int) 中並且也是自頂向下。在這個過程中,每個父節點負責定位它的所有子節點,通過使用在度量過程中計算得到的尺寸。
當一個視圖的measure()方法返回時,它的getMeasuredWidth()和getMeasuredHeight() 值必須被設置,以及所有這個視圖子節點的值。一個視圖的度量的寬度和高度值必須符合父視圖引入的限制。這確保在度量過程之後,所有父節點接受所有它們的子節點的度量值。一個父視圖可能會在其子視圖上多次調用measure()方法。比如,父視圖可能會通過未指定的尺寸調用measure來發現它們的大小,然後使用實際數值再次調用measure(),如果所有子視圖未做限制的尺寸總合過大或過小(也即是,如果子視圖之間不能對各自占據的空間達成共識的話,父視圖將會干預並設置第二個過程的規則)。
要開始一個布局,可調用requestLayout()。這個方法通常在視圖認為它自己不再適合它當前的邊界的情況下被調用。
度量過程使用兩個類來交流尺寸。View.MeasureSpec類被視圖用來告訴它們的父視圖它們想如何被度量和定位。基礎的LayoutParams類僅僅描述了視圖想有多大(高和寬)。對於每個維度,它可以指定下面之一:
對於不同的ViewGroup子類,有相應的LayoutParams子類。比如,相對布局RelativeLayout有它自己的LayoutParams子類,這包含了能夠讓子視圖橫向和豎向居中顯示的能力。
度量規格(MeasureSpecs)被用來沿著樹從父到子的下傳度量需求。一個MeasureSpecs可以是下面三種模式之一:
參考:SDK文檔http://developer.android.com/guide/topics/ui/how-android-draws.html
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
策略模式其實特別簡單(聽到這句話,大家是不是心裡一下子放松了?)。比如排序,官方告訴大家我這裡有一個排序的接口ISort的sort()方法,然後民間各盡其能,實現
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放