Android布局尺寸思考

來源:互聯網
上載者:User

標籤:

一、初步思考
  1. 雖然安卓的這個顯示適配的方案有點怪,最初也不容易馬上理解,不過這個方案確實有其自己的道理,整個思路是清晰的,方案的也是完整的,沒有硬傷
  2. 安卓採用的【螢幕密度放縮機制】、與web前端對應的是【螢幕比例放縮機制】
  3. 安卓裡邊,每一段以dp結尾的數值代表的是一段真實的物理尺寸,對,就是物理尺寸,你甚至可以認為它的單位就是“厘米”!
  4. 除了百分比和物理尺寸,還可以用什嗎?可以用px,對,用像素點,這個是最原始的,不過這樣用會有哪些問題呢?
  5. 使用dp和不同的layout在邏輯上是能適應所有情況的
  二、深入思考從源頭來說
  1. 布局顯示的單位最開始最直接的思路肯定是用px,因為電子螢幕就是由一個個px像素點組成的,所以你定義一個組件的長度的時候自然會使用px
  2. 不過在你使用px之後,你會自然地遇到一個問題:當螢幕變化之後,是否能顯示你預想的效果?
  3. 這個問題很棘手,一開始拿到會找不到突破口,因為螢幕千奇百怪,然後實際的使用情境也各不一樣,怎麼可能有銀彈嘛,不過且慢,我們靜下心分析
  4. 細細想來,螢幕變化只可能有兩個維度:螢幕物理尺寸和螢幕像素多少,而分析幾個實際例子可以發現我們其實只關心其中的一個,那就是物理尺寸;另外其實使用情境可以恰當地分離出去,最後篩選出這五種情況
    1. 【1】當螢幕物理尺寸沒有變化的時候,無論螢幕像素如何,我們希望的是顯示效果也是一樣
      1. 因為這是從人眼看物的情況來考慮,人眼看物是根據物理尺寸來的,所以這個基本是個定值
    2. 而當螢幕物理尺寸縮小的時候,就會有個比較複雜的情況了,不過有幾個大概規律:
      1. 【2】當縮小地不多的時候,我們基本希望顯示內容不變,顯示的東西按比例縮小一些
      2. 【3】當縮小地比較多的時候,我們希望顯示的內容少一些(其實就是布局發生變化,怎麼變化跟具體情境有關)
    3. 而當螢幕物理尺寸放大的時候,同樣:
      1. 【4】當放大地不多的時候,我們基本希望顯示內容不變,顯示的東西按比例放大一些
      2. 【5】當放大地比較多的時候,我們希望顯示的內容多一些(其實就是布局發生變化,怎麼變化跟具體情境有關)
  5. 把三種布局尺寸機制對比一下
    1. px
      1. 這五條都不能實現
    2. dp
      1. 第一條能夠完美實現
      2. 第二條、第四條 是通過幾種特殊的尺寸基本及格實現(matchparent、比例布局)
      3. 第三條、第五條 也只能通過上面的特殊尺寸來搞,但是無法實現
    3. 百分比
      1. 第一條能夠完美實現
      2. 第二條、第四條 能夠完美實現
      3. 第三條、第五條 無法實現
    4. dp+物理尺寸特殊對待機制(就是layou-large檔案夾)
      1. 第三條、第五條 基本完美實現
    5. 百分比 +物理尺寸特殊對待機制
      1. 第三條、第五條 完美實現
  6. 所以總體來說,百分比布局比dp布局有少許優勢,優勢有限
  三、其他小東西 3.1.dp布局然後具體說一下dp布局是怎麼實現第一條的
  1. 這個分兩塊,一塊的標註的尺寸,一塊是圖片
  2. 首先對於標註的尺寸,這個不用你管,你直接標dp,不用再多管,那就會是一個物理尺寸了,不隨著像素密度變化而變化
    1. 而這裡這個dp和px的轉換是有嚴格的公式計算的,非常精確,就是不太好算:
      1. px = dp*ppi/160
      2. dp = px / (ppi / 160)
      3. PPI =( √(長度像素數² + 寬度像素數²)) / 螢幕對角線英寸數
    2. 從這裡也可以看到所謂的÷3其實只是計算結果正好是3而已,也可以是2.9 3.2什麼的
  3. 然後是對於圖片,是根據【原圖適配的螢幕密度】來把圖片分類放在不同檔案夾來實現的(注意跟物理尺寸特殊對待機制區分)
    1. 這裡需要具體說,裡邊有些小繞繞
    2. 首先一張圖做出來給你,是你手動決定把圖放到哪個檔案夾下的(一共有low--medium--high--xhigh--xxhigh幾個檔案夾)
      1. 你是根據做這張圖的人 的【目標螢幕的螢幕密度】來放的
      2. 根據計算得到的螢幕密度,按照Google的標準(每個檔案夾對應的標準螢幕密度值 )選擇一個檔案夾
    3. 然後系統會這麼進行縮放
      1. 首先系統會識別你的螢幕密度是多少
      2. 然後劃分你這個螢幕密度是屬於哪個層級【這個標準是什嗎?】
      3. 然後去對應的層級下的檔案夾中去找圖片
      4. 如果當前檔案夾沒有圖片,就去前後找(以後為主),找到之後,按照標準比值來縮放(3:4:6:8:12)
      5. 所以隨便你怎麼放,系統只負責縮放,你也知道怎麼放的後果,所以你自己決定怎麼放(所以你自己就會有個範圍,就是中等分算了)
    4. 這樣縮放很明顯會有問題,當目標解析度不是標準解析度的時候就會不精確
      1. 比如你的目標假如是170,然後你只能放到160的檔案夾下,然後如果拿一個170的手機去跑,你會發現圖片明顯縮小了
    5. 評論:
      1. 圖片放縮有問題,除非可以自訂螢幕密度檔案夾
      2. 如果不可以自訂的話,可以用尺寸固定imageview的大小,然後用src的最小邊中心放縮
  3.2.UI做的像素圖怎麼跟手機啟動並執行比較?
  1. 所有對應的目尺規寸的機型的是比例對齊的
    1. 原圖為px圖A
    2. 如果設定目尺規寸是5.5,那麼用5.5的機子跑下來B,用4.7的機子跑下來C
    3. 如果設定目尺規寸是4.7,那麼用4.7的機子跑下來D,用5.5的機子跑下來E
    4. A、B、D比例適應
    5. C和E跟上面都不比例適應

      

博友中秋快樂~

Android布局尺寸思考

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.