美文网首页
屏幕适配-像素密度

屏幕适配-像素密度

作者: migill | 来源:发表于2019-10-06 00:06 被阅读0次

屏幕适配-像素密度

原理:修改density,scaleDensity,densityDpi值,直接更改系统内部对于目标尺寸而已言的像素密度。

density:表示像素密度 换句话说每一英寸像素的缩放比例 density = dpi / 160
scaleDenstiy: 表示字体的缩放比例,默认情况下和density是一致的
densityDpi:表示每一英寸共有多少个像素点 dpi=density*160

public class Density {

    private static final float WIDTH = 320;//参考设备的宽,单位是dp 320 / 2 = 160

    private static float appDensity;//表示屏幕密度
    private static float appScaleDensity; //字体缩放比例,默认appDensity

    public static void setDensity(final Application application, Activity activity) {
        //获取当前app的屏幕显示信息
        DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();
        if (appDensity == 0) {
            //初始化赋值操作
            appDensity = displayMetrics.density;
            appScaleDensity = displayMetrics.scaledDensity;

            //添加字体变化监听回调
            application.registerComponentCallbacks(new ComponentCallbacks() {
                @Override
                public void onConfigurationChanged(Configuration newConfig) {
                    //字体发生更改,重新对scaleDensity进行赋值
                    if (newConfig != null && newConfig.fontScale > 0) {
                        appScaleDensity = application.getResources().getDisplayMetrics().scaledDensity;
                    }
                }

                @Override
                public void onLowMemory() {

                }
            });
        }

        //计算目标值density, scaleDensity, densityDpi
        float targetDensity = displayMetrics.widthPixels / WIDTH; // 1080 / 360 = 3.0
        float targetScaleDensity = targetDensity * (appScaleDensity / appDensity);
        int targetDensityDpi = (int) (targetDensity * 160);

        //替换Activity的density, scaleDensity, densityDpi
        DisplayMetrics dm = activity.getResources().getDisplayMetrics();
        dm.density = targetDensity;
        dm.scaledDensity = targetScaleDensity;
        dm.densityDpi = targetDensityDpi;
    }

}

在Application进行设置,就不用在每个activity中设置了。

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                Density.setDensity(App.this, activity);
            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {

            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });

    }
}

相关文章

  • 适配

    屏幕适配: 像素: px 像素密度: dpi(px/inch)...

  • 屏幕适配-像素密度

    屏幕适配-像素密度 原理:修改density,scaleDensity,densityDpi值,直接更改系统内部对...

  • 前端中的设备适配问题

    基础概念 虚拟像素 设备像素 设备独立像素 像素密度 设备像素比 retina屏幕 viewport PC端适配方...

  • Android屏幕适配

    Android屏幕适配 概述 屏幕适配的主要目标有两个,不同屏幕尺寸的适配和不同像素密度的适配。随着手机行业发展异...

  • Android 屏幕适配-像素密度适配

    承接Android 屏幕适配 说明:本文仅为简单思路,没有实现项目适用的轮子 通过修改系统像素密度做屏幕适配的主要...

  • Android屏幕适配

    Android屏幕适配主要包含三个方面 屏幕像素密度(ldpi,mdpi,hdpi,xhdpi,xxhdpi,xx...

  • Dessert Lan's Information

    屏幕适配 关键词: 屏幕尺寸:灵活布局、备用布局、可拉伸图片(九宫位图) 像素密度:不受密度制约、备用位图、矢量图...

  • 玩安卓---今日头条的屏幕适配

    今日头条的屏幕适配 DPI DPI: 计算1英寸面积内像素的多少,即像素的密度。代表的是屏幕对角线每英寸的像素个数...

  • 屏幕尺寸、屏幕分辨率px X px,屏幕像素密度density,

    屏幕尺寸、屏幕分辨率px X px,屏幕像素密度density,像素px,密度无关像素dip,mdpi,hdpi,...

  • 鸿洋AutoLayout代码分析(一):原因和使用

    简单描述 android的适配比较麻烦,通常简单的适配有 图片适配不同像素密度屏幕,加载不同路径,相同名称的图片 ...

网友评论

      本文标题:屏幕适配-像素密度

      本文链接:https://www.haomeiwen.com/subject/lfnypctx.html