1. 程式人生 > >Android螢幕適配使用dimens

Android螢幕適配使用dimens

關於Android螢幕適配中使用多個dimens的遇到的問題

我相信大家在android開發中,肯定會遇到一個問題,那就是螢幕適配問題,通常我們做app只需要適配各種型別的手機就OK了,最近公司要求把pad上的app適配到手機上,這個有點麻煩,所以著重研究了一下。

基本概念:dp、sp、px、dpi、density

  • dp:最常用的長、寬、margin、padding等的單位
  • sp:字型的單位,和dp差不多,區別是如果字型使用的sp為單位,那如果你手機字型調大了,那你app的字型會隨之變大,如果用dp則不會變化。
  • px:畫素
  • dpi:dots per inch,即每英寸上有多少個畫素,也就是螢幕密度,具體計算下面寫說
  • density:density=dpi/160

dp和px轉換

px=dp*(dpi/160)

計算dpi、density

以5.5寸1920 * 1080的手機為例:

5.5寸是指手機對角線的長度,解析度是1920 * 1080,也就是知道長畫素是1920,寬畫素是1080,那麼對角線多長呢,其實就是求斜邊的長度: 1920^2+1080^2=2202^2

所以 dpi=2202/5.5=400

(哎呀,有點囉嗦了)

需要注意的 dp是不管你手機密度有多大,它的物理尺寸是不變的,就是說,比如一個圖片設定大小100dp*100dp,那它在dpi為320的手機上就佔 200px * 200px

,如果是dpi=400的手機上,那就佔250px * 250px,那麼你在螢幕上看到圖片的大小是沒有變化的

(我相信做android開發,大家對這些應該就很熟悉了,就不詳細寫了,有不清楚的請自行學習,哈哈)

說說適配的事


1.使用相對佈局

我這相對佈局的意思,不只是使用RelativeLayout,還有使用LinearLayout中的weight。(插一句,在相同層級的情況下,推薦使用LinearLayout,如果可以減少層級,則使用RelativeLayout,但是如果使用了weight,LinearLayout也就失去了它的優勢,和相對佈局一樣需要二次計算了)。

杜絕使用絕對佈局!

 我相信現在應該沒有人用絕對佈局了吧

在寫佈局的時候,就應該考慮到螢幕大或者小,顯示會不會有問題。多想一下,很重要

我覺得只要佈局寫的好,基本可以解決90%的適配問題,當然這也是要修煉內功,才能運用順暢的。(寫的多就有經驗啦)

2.生成各種尺寸的dimens

具體如何在values生成各種尺寸的dimens.xml,請參考下面連結
http://blog.csdn.net/hnzcdy/article/details/50628993

執行結果下圖:

dimens.png

因為手機尺寸太多,所以有時候,我們不得不在不同螢幕大小,使用一些不同的值,這個時候用dimens就很方便了。

不過在這裡,我主要是說,sw240dp是啥意思,以及不同的手機具體使用哪個dimens。具體怎麼使用、生成,看上面那篇文章就可以啦。

sw:small width,最小寬度,即不管手機是橫屏還是豎屏,螢幕可展示的最小邊,比如1920*1080,那最小就是1080px。

那麼怎麼什麼手機用什麼dimen呢?怎麼算呢?

舉例說明:

  • 還是以1920*1080 5.5寸的手機舉例(這種手機目前比較多)
  • 這種手機呢,dpi是400,denity是2.5,就是1dp=2.5px,(前面算的)
  • dimens是按著最小邊大於哪個值就找哪個值
  • 那它應該用哪個dimens呢?1080/2.5=432,按著上圖我們配置的,432>360,432<480,所以,最終使用的是sw360dp的dimens.xml
  • 在320dp和480dp之間,有很多手機,所以我們可以把這個區間分的細一點,比如320、340、360、380、400,這樣適配會更好點

有人可能會疑惑,為啥要算的這麼麻煩呢,因為sw360dp,說的是最小邊大於360dp就用這個dimens,但是我們知道手機解析度是畫素,是px,所以要換算一下

備註一下,使用dimens相當於是等比縮放,自己可以在DimenTool中配置縮放比例

3.關於適配的感受

其實我覺得,要是想有好的使用者體驗,pad和手機最好還是兩套設計,畢竟兩者互動方式是有很大區別的,單純移植肯定體驗比較差。簡單一點呢,就把一些比較明顯不合適的地方,寫兩套佈局,不同尺寸使用不同的佈局。

寫的有點亂,先這樣記錄一下。