Android 多屏幕適配 dp和px的關系


一直以來別人經常問我,android的多屏幕適配到底是怎么弄,我也不知道如何講解清楚,或許自己也是挺迷糊。

以下得出的結論主要是結合官方文檔進行分析的https://developer.android.com/guide/practices/screens_support.html

android由於碎片化太嚴重,而導致市面上出現非常多的種類尺寸手機設備,當然也包括非常奇葩的分辨率手機。所以我們在布局的時候使用px作為單位顯然不能很好的做到多屏幕的適配。其實在官方文檔中有介紹一種解決多屏幕適配的問題的尺寸單位dp/dip(Density-independent pixel )

文檔中也給出了px和dp之間的關系表達式:px = dp * (dpi / 160) 其中dpi表示的是設備屏幕密度,不同的設備dpi可能不一致。

例如在一個dpi為240的設備屏幕中,1個dp等價於2個px,也就是一個dp長度下包含2個px,如果dp與px的倍數越大,屏幕看起來也就越清晰。

谷歌已經針對dpi進行了分類:

  • A set of six generalized densities:
    • ldpi (low) ~120dpi
    • mdpi (medium) ~160dpi
    • hdpi (high) ~240dpi
    • xhdpi (extra-high) ~320dpi
    • xxhdpi (extra-extra-high) ~480dpi
    • xxxhdpi (extra-extra-extra-high) ~640dpi   

 上述表述可以看出他是一個區間的,並不是一個固定的值。

基於px和dp的關系式。假如在屏幕像素為800*1280,dpi為240的設備上,dp的總長度只有600dp

在屏幕像素為800*1280 ,dpi為320的設備上,dp的總長度只有400dp

以下是測試代碼,來驗證dp的實際長度

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#f00"
        android:src="@drawable/ic_launcher" />

    <ImageView
        android:layout_width="100dip"
        android:layout_height="40dip"
        android:src="#0f0" />

    <ImageView
        android:layout_width="200dip"
        android:layout_height="40dip"
        android:src="#0fa" />

    <ImageView
        android:layout_width="300dip"
        android:layout_height="40dip"
        android:src="#0ff" />

    <ImageView
        android:layout_width="400dip"
        android:layout_height="40dip"
        android:src="#09f" />

</LinearLayout>

720*1280  320dpi                        480*800   160dpi                                   480*800   240dpi   

dp總長度為360dp                           dp的總長度為480dp                                 dp的總長度為320dp

                           

總結一

一般情況下如果屏幕分辨率和屏幕密度成一定比例的關系,那么不管分辨率多大,得出的dp總長度將會在一定的范圍內。那么使用dp作為單位將能很好的解決多分辨率適配的問題。

然而由於設備屏幕分辨率和屏幕密度並不是成一個固定的比例,所以全部用dp的寫,似乎不是很好。建議使用warp_content 和match_parent來配合使用。對於布局的高寬沒有明確限制的,盡量結合相對布局和權重來表示,這樣不管在什么分辨率下,界面的樣式不會錯亂。

 


免責聲明!

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



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