Android屏幕適配

  • 屏幕適配不得不提到屏幕密度如何計(jì)算


    屏幕密度計(jì)算.png

比如 1920px*1080px 5英寸:
√(1920^2 +1080^2)=2202.9071700823
2202.9071700823/5=440.5814340165(ppi)≈440ppi

  • 存在問(wèn)題
    一般我們?cè)O(shè)計(jì)圖都是以固定的尺寸來(lái)設(shè)計(jì)的。比如以分辨率1920px * 1080px來(lái)設(shè)計(jì),以density為3來(lái)標(biāo)注,也就是屏幕其實(shí)是640dp * 360dp。
    而實(shí)際上以上面的例子來(lái)說(shuō)440dpi/160 = 2.75(即1dp = 2.75px)而UI給的標(biāo)注是(1dp = 3px),所以無(wú)法在不同設(shè)備上顯示為同樣效果的。

  • android中的dp在渲染前會(huì)將dp轉(zhuǎn)為px,計(jì)算公式:
    px = density * dp;
    density = dpi / 160;
    px = dp * (dpi / 160);

  • 如何適配
    支持以寬或者高一個(gè)維度去適配,保持該維度上和設(shè)計(jì)圖一致;
    支持dp和sp單位,控制遷移成本到最小。
    從dp和px的轉(zhuǎn)換公式 :px = dp * density
    可以看出,如果設(shè)計(jì)圖寬為360dp,想要保證在所有設(shè)備計(jì)算得出的px值都正好是屏幕寬度的話,我們只能修改 density 的值。

  • 方案(下面假設(shè)設(shè)計(jì)圖寬度是360dp,以寬維度來(lái)適配)

由于字體也是用dp(不是用sp)進(jìn)行設(shè)置的,所以字體也能進(jìn)行適配
Activity的onCreate()進(jìn)行調(diào)用

先來(lái)熟悉下 DisplayMetrics 中和適配相關(guān)的幾個(gè)變量:
DisplayMetrics#density 就是上述的density
DisplayMetrics#densityDpi 就是上述的dpi
DisplayMetrics#scaledDensity 字體的縮放因子,正常情況下和density相等,但是調(diào)節(jié)系統(tǒng)字體大小后會(huì)改變這個(gè)值

public class ScreenAdaptationUtil {

    public static void setCustomDensity(@NonNull Activity activity, @NonNull Application application) {

        final DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();
        final float targetDensity = displayMetrics.widthPixels / 360;
        final int targetDensityDpi = (int) (160 * targetDensity);

        displayMetrics.density = displayMetrics.scaledDensity = targetDensity;
        displayMetrics.densityDpi = targetDensityDpi;

        final DisplayMetrics activityDisplayDisplayMetrics = activity.getResources().getDisplayMetrics();
        activityDisplayDisplayMetrics.density = activityDisplayDisplayMetrics.scaledDensity = targetDensity;
        activityDisplayDisplayMetrics.densityDpi = targetDensityDpi;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文參考自: Google的官方權(quán)威適配文檔 郭霖:Android官方提供的支持不同屏幕大小的全部方法 Storm...
    M悇芐冋憶閱讀 13,275評(píng)論 5 56
  • 在我們學(xué)習(xí)如何進(jìn)行屏幕適配之前,我們需要先了解下為什么Android需要進(jìn)行屏幕適配。 由于Android系統(tǒng)的開(kāi)...
    知青的葉閱讀 1,635評(píng)論 0 2
  • 屏幕適配 屏幕適配的概念 碎片化既是 Android 的優(yōu)勢(shì)和弱點(diǎn),也是開(kāi)發(fā)者們頭疼的問(wèn)題,同時(shí)也為 Androi...
    s酸菜閱讀 10,258評(píng)論 9 58
  • tags: Tutorial 引言 國(guó)慶前在微信群里看到有人在問(wèn)Android屏幕適配的問(wèn)題,湊巧自己最近時(shí)間略有...
    coder_pig閱讀 2,347評(píng)論 2 13
  • 1、基礎(chǔ)概念 屏幕尺寸 含義:指的屏幕對(duì)角線的物理長(zhǎng)度,單位一般采用英寸(1英寸≈2.53cm) 目前市面常見(jiàn)的有...
    古都舊城閱讀 2,912評(píng)論 0 1

友情鏈接更多精彩內(nèi)容