適配原因
原生渲染前會(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)題。
/**
* 適配:修改設(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

2.下載dimens.xml并存放在values目錄下

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)文件夾

因?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
使用





