Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 理解Android的layout和measure

理解Android的layout和measure

編輯:關於Android編程

在Android UI開發中,總會有情況需要自定義View和View Group.  什麼是View?就是Android中一個基本視圖單位,一個Button是一個view, 一個Layout, 也是一個View 什麼是ViewGroup, ViewGroup本身也是一種View. 但是ViewGroup能夠包含子View. 可以理解為ViewGroup往往是一個容器。比如說LinearLayout, FrameLayout就是屬於ViewGroup.   measure和layout是非常重要的兩個概念   measure設置view的大小,如果有child view, 循環調用其measure函數 layout擺放child view的位置   舉一個例子,我需要在程序中顯示一個頁面A, 該頁面包括兩個子view A1, A2.  那麼我就需要為A創建一個ViewGroup的繼承類。在裡面重寫OnMeasure函數。偽代碼如下: OnMeasure(){   設置A自身大小   A1.measure //調用子view的measure函數   A2.measure//調用子view的measure函數 }   然後重寫OnLayout函數。偽代碼如下: OnLayout(){ 設置A1位置 設置A2位置。 }   然後在A1和A2中,重寫OnMeasure函數,設置自身大小 A1:  OnMeasure{ 設置自身大小 } A2:  OnMeasure{ 設置自身大小 }   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 但是疑問就來了,為毛要這麼麻煩?位置和大小難道不能在xml布局中就指定嗎? 我只能回答:擦!我也這樣看 但是安卓的設計師們,心懷天下,一心想干出個能應對世界無數種尺寸,面對無數種環境,靈活性伸縮性好比小弟弟的UI框架來。於是......   比如說,他們認為有一種容器,叫LinearLayout。於是就創造了它。 這種神奇的容器,在把子view放入裡面的時候,不需要指定其大小,只需要說一句:我和俺爹一樣大。於是“啪”,這個字View被貼上一個"Match_parent"標簽 也不需要指定位置。因為你的位置總是接在前面一個子View的後面。   哇色!!!!,如果你第一次看到這麼神奇的容器,把東西扔進去不需要指定長寬和位置就直接擺放,覺得真的真的好牛逼哦。   但其實不然,一個View如果被放進來,並且標注自身為Match_parent的時候,就會在OnMeasure裡面被一頓計算,因為parent大小總是知道的吧,最大不過屏幕嘛,結合margin和padding,就可以被計算出長寬。關於位置。由於所有View都是順序擺放的,在layout過程中也會結合margin和Padding,給計算出准確的位置。   這麼麻煩?繞這麼大個圈?那是不是可以直接指定大小和位置呢?  No. 大小可以直接指定,位置不可以直接指定。   為啥位置不能直接指定? 因為這個是LinearLayout,如果你想隨意指定位置的,用其他的layout嘛,或者你自己自定義嘛   = =~,再也不想哇色了,我還不如像其他平台一樣,直接畫一個View出來,往裡面隨便擺放東西,自己指定大小位置。也不分什麼View和ViewGroup了。這些偉大的白癡們,精心設計了一團復雜無比的垃圾   為啥需要measure和layout?為啥不在xml布局階段就指定大小位置? 別告訴我是為了擴展性的需要, 別告訴我是為了靈活性的需要, 別告訴我是因為手機屏幕尺寸各式各樣   No.  只是因為。。。。 把簡單的事情搞復雜,是展現下限的方式
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved