Android分辨率適配心得


  關於Android分辨率適配,這個是Android開發很頭疼的一個問題,也需要花費相當一部分開發時間處理的一個問題,往往一個界面怎么適配就得想半天,特別是新手,也經常有人問我是怎么適配分辨率的,我也不能幾句話說清楚,自己也在研究中。

  其實,我覺得分辨率適配,不只是研發單方面的事情,與產品、UI設計師也有很大關聯。首先產品必須了解一點Android布局以及分辨率適配的知識,設計的界面布局可以盡量簡潔一點,效果圖界面顯示效果盡量稀疏一點,考慮到各個尺寸的手機每個界面的顯示情況。其次,UI設計師設計時,也最好先定義一些級別的尺寸,例如一個應用的所有文字大小只有6個級別,所有界面的設計都盡量在這6個級別中選取,不要每個界面文字都不同,這樣終端如果在配置文件里配置文字大小,就只需要6個配置了,另外,按鈕背景等的切圖,能不使用顏色漸變就不使用顏色漸變,這樣終端可以使用.9.png的圖片,既減小apk的尺寸,又節約應用內存。

  分辨率適配必須了解的知識:

  Supporting Multiple Screens :http://wiki.eoeandroid.com/Supporting_Multiple_Screens

  Providing Resources :http://wiki.eoeandroid.com/Providing_Resources

  

  我覺得分辨率適配的主要的幾種方式:

  1、通過配置文件適配分辨率:

  控件尺寸,我覺得可以以屏幕寬度作為參考,一般手機屏幕比例差不多是320*480,如果一個控件的高度大約是屏幕總高度的0.1,就就差不多是寬度的0.1*1.5倍。

  例如,文字大小,可以以屏幕寬度做參考,定義幾個級別的大小(sw為屏幕寬度):

  textsize1 = 23    (0.036*sw,列表3級)
  textsize2 = 32    (0.050*sw,列表2級)
  textsize3 = 37    (0.058*sw,列表1級)
  textsize4 = 45    (0.070*sw,標題)
  textsize5 = 56    (0.088*sw,特大)
  然后應用中盡量使用這幾個文字大小。
  
  配置文件,可以定義以下幾個配置文件:
  values-small(可以當做sw300計算)
  values-normal(可以當做sw320計算)
  values-large(可以當做sw480計算)
  values-xlarge(可以當做sw720計算)
  values-sw300dp(sw=300dp,以下相同)
  values-sw320dp
  values-sw340dp
  values-sw360dp
  values-sw400dp
  values-sw480dp
  values-sw520dp
  values-sw600dp
  values-sw720dp
  前4個是兼容api13以前的手機,api13以后就支持sw屬性了,sw320dp附近的大小間隔可以精細點,因為大多數屏幕寬度都是320dp-360dp范圍內,基本按照這個配置讀取到的屏幕寬度和實際屏幕寬度相差很小了。
  定義這些比例,以及計算所有文件夾得配置大小,需要比較多的時間,但是只要配置完了,以后開發分辨率適配就會快速容易很多了。
 
  參考配置:
    <dimen name="screen_h_0_02">9.6dp</dimen>
    <dimen name="screen_h_0_04">19.2dp</dimen>
    <dimen name="screen_h_0_06">28.8dp</dimen>
    <dimen name="screen_h_0_08">38.4dp</dimen>
    <dimen name="screen_h_0_1">48dp</dimen> <!-- sw*0.15 -->
    <dimen name="screen_h_0_2">96dp</dimen>
    <dimen name="screen_h_0_3">144dp</dimen>
    <dimen name="screen_h_0_4">192dp</dimen>
    <dimen name="screen_h_0_5">240dp</dimen>
    <dimen name="screen_h_0_6">288dp</dimen>
     <dimen name="screen_h_0_7">336dp</dimen>
    <dimen name="screen_h_0_8">384dp</dimen>

    <dimen name="screen_w_0_1">32dp</dimen>
    <dimen name="screen_w_0_2">64dp</dimen>
    <dimen name="screen_w_0_3">96dp</dimen>
    <dimen name="screen_w_0_4">128dp</dimen>
    <dimen name="screen_w_0_5">160dp</dimen>
    <dimen name="screen_w_0_6">162dp</dimen>
    <dimen name="screen_w_0_7">224dp</dimen>
    <dimen name="screen_w_0_8">256dp</dimen>
    <dimen name="screen_w_0_9">288dp</dimen>
    <dimen name="screen_w">320dp</dimen>

   <!-- 文字 -->
    <!-- 0.030*sw,列表3級 -->
    <dimen name="com_textsize_small">9.6dp</dimen>
    <!-- 0.042*sw,列表2級 -->
    <dimen name="com_textsize_medium_small">13.4dp</dimen>
    <!-- 0.049*sw,列表1級 -->
    <dimen name="com_textsize_medium">15.7dp</dimen>
    <!-- 0.059*sw,標題 -->
    <dimen name="com_textsize_medium_large">18.9dp</dimen>
    <!-- 0.074*sw,特大 -->
    <dimen name="com_textsize_large">23.7dp</dimen>


    <!-- 按鈕 -->
    <!-- 0.081*sw,純文字 -->
    <dimen name="com_btn_h_medium_small">26dp</dimen>
    <!-- 0.100*sw,短按鈕 -->
    <dimen name="com_btn_h_medium">32dp</dimen>
    <!-- 0.125*sw,長按鈕 -->
    <dimen name="com_btn_h_medium_large">40dp</dimen>
    <!-- 0.144*sw,特大 -->
    <dimen name="com_btn_h_large">46dp</dimen>

   <!-- 間距 -->
    <!-- 0.025*sw -->
    <dimen name="com_padding_small">8dp</dimen>
    <!-- 0.031*sw,activity padding -->
    <dimen name="com_padding_medium_small">10dp</dimen>
    <!-- 0.050*sw,上邊距 -->
    <dimen name="com_padding_medium">16dp</dimen>
    <!-- 0.069*sw,模塊間距 -->
    <dimen name="com_padding_medium_large">22.1dp</dimen>
    <!-- 0.094*sw,特大 -->
    <dimen name="com_padding_large">30.1dp</dimen>

  ......

 

  2.代碼控制
  級根據控件實際可申請到的空間大小,以及內容多少,進行代碼控制大小。
  例如一個 文字自適應的開源控件: https://github.com/grantland/android-autofittextview
  
  先分享這么多,以后發現有更好的適配方式,再分享。
  如果大家有更好的適配方法,歡迎討論指教。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM