android 屏幕適配方案

適配原因

原生渲染前會(huì)將dp轉(zhuǎn)為px,dpi就是導(dǎo)致差異化因素也叫像素密度,根據(jù)設(shè)備分辨率和尺寸計(jì)算得出,出廠時(shí)已經(jīng)決定了
density = dpi / 160
px = dp * density


在這里插入圖片描述
適配方案

1.dimens基于px適配(寬高限定符適配)

在res文件中,定義不同分辨率px參數(shù),例如values-480*320 ,但是這種方案由于手機(jī)分辨率太多,局限性太高,棄用。

2.dimens基于dp適配(smallestWidth適配)

這種是根據(jù)最小寬度限定符,android會(huì)識(shí)別屏幕可用寬高的最小dp值,然后根據(jù)結(jié)果去尋找對(duì)應(yīng)限定符的文件夾下的資源文件。
比如沒(méi)有value-sw360dp 文件夾會(huì)向下尋找 value-sw350dp ,這種增加了分辨率匹配的容錯(cuò)率。
但是這種弊端是,會(huì)增加多個(gè)文件夾,而且也不能完美匹配所有機(jī)型

3.今日頭條適配

今日頭條適配方案是通過(guò)修改手機(jī)設(shè)備密度density完成的,通過(guò)修改density值,強(qiáng)行把所有不同尺寸分辨率的手機(jī)的寬度dp值改成一個(gè)統(tǒng)一的值,這樣就解決了所有的適配問(wèn)題。

https://blog.csdn.net/weixin_34113237/article/details/87991287?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

/**
     * 適配:修改設(shè)備密度
     */
    private static float sNoncompatDensity;
    private static float sNoncompatScaledDensity;
 
    public static void setCustomDensity(@NonNull Activity activity, @NonNull final Application application) {
        DisplayMetrics appDisplayMetrics = application.getResources().getDisplayMetrics();
        if (sNoncompatDensity == 0) {
            sNoncompatDensity = appDisplayMetrics.density;
            sNoncompatScaledDensity = appDisplayMetrics.scaledDensity;
            // 防止系統(tǒng)切換后不起作用
            application.registerComponentCallbacks(new ComponentCallbacks() {
                @Override
                public void onConfigurationChanged(Configuration newConfig) {
                    if (newConfig != null && newConfig.fontScale > 0) {
                        sNoncompatScaledDensity = application.getResources().getDisplayMetrics().scaledDensity;
                    }
                }
 
                @Override
                public void onLowMemory() {
 
                }
            });
        }
        float targetDensity = appDisplayMetrics.widthPixels / 360;
        // 防止字體變小
        float targetScaleDensity = targetDensity * (sNoncompatScaledDensity / sNoncompatDensity);
        int targetDensityDpi = (int) (160 * targetDensity);
 
        appDisplayMetrics.density = targetDensity;
        appDisplayMetrics.scaledDensity = targetScaleDensity;
        appDisplayMetrics.densityDpi = targetDensityDpi;
 
        final DisplayMetrics activityDisplayMetrics = activity.getResources().getDisplayMetrics();
        activityDisplayMetrics.density = targetDensity;
        activityDisplayMetrics.scaledDensity = targetScaleDensity;
        activityDisplayMetrics.densityDpi = targetDensityDpi;
 
    }

官方屏幕適配之ScreenMatch DP適配

Android ScreenMatch屏幕適配是一種簡(jiǎn)單適用的適配方式,是由Android官方推出的適配方法

1.首先下載安裝ScreenMatch插件,Ctrl+Alt+S打開(kāi)Plugins
image.png
2.下載dimens.xml并存放在values目錄下
image.png

dimens.xml下載地址:https://download.csdn.net/download/duanchuanzhi/10544316

3.生成values-sw384dp~values-sw1365dp,生成步驟:

3.1.使用鼠標(biāo)左鍵點(diǎn)擊任意文件夾


image.png

3.2.點(diǎn)擊ok


image.png

3.3.彈出Over, adapt successful提示表示生成成功,繼續(xù)點(diǎn)擊ok
image.png
生成成功之后會(huì)在res目錄下生成對(duì)應(yīng)文件夾
image.png

因?yàn)槟J(rèn)生成的是下列最小寬度dp的dimens.xml文件
384,392,400,410,411,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365,如果不需要或者需要增加某些dp值的dimens.xml文件,則需要修改配置文件,即screenMatch.properties文件(修改前先刪除之前生成的全部dimens.xml文件)。配置文件在我們執(zhí)行完成上面的命令后,會(huì)在項(xiàng)目的目錄下自動(dòng)生成,如下:


image.png

打開(kāi)文件,修改需要適配384,392,400,410,411的值,不需要適配480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365的值


image.png

使用

image.png
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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