android屏幕适配终极方案

1,屏幕适配类


public class Density {

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

    private static float appDensity;//表示屏幕密度

    private static float appScaleDensity;//字体缩放比例,默认appDensity

    public static void setDensity(final Application application, Activity activity) {

         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 targetDencity = displayMetrics.widthPixels /WIDTH;//1080 / 360 = 3.0

        float targetScaleDensity = targetDencity * (appScaleDensity /appDensity);

        int targetDensityDpi = (int) (targetDencity *160);

        //替换activity的 Density ScaleDensity DensityDpi

        DisplayMetrics dm = activity.getResources().getDisplayMetrics();

        dm.density = targetDencity;

        dm.scaledDensity = targetScaleDensity;

        dm.densityDpi = targetDensityDpi;

    }

}

2,在Application中使用

public class Appextends 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) {

            }

            });

    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 学习打卡第21天。 日目标A:跑步5km,或跳绳1000个。 完成情况:跑步0km(本月累计71km)+跳绳100...
    Yang_5阅读 1,432评论 0 2
  • 塑形改造 90天 第八天打卡 目標:體脂10%, 減脂為主,增肌為輔 減脂原理:卡路理消耗大于攝入 增脂原理:练得...
    Hekmanman阅读 1,202评论 0 1
  • 过了五一 又是五四 大家互祝着快乐 因为生意惨淡 商家强装笑脸 以欢乐的名义 推出折扣 夜幕降临 驼背的菜农 细雨...
    easy李文飞阅读 1,189评论 1 2
  • 这是一个粉丝经济的时代 这是一个整合资源的时代 想要快速的成为一个整合资源高手,你首先需要打造自己的品牌,有了自己...
    王通专栏阅读 2,669评论 0 1
  • 这就是攀比心和竞争心,但是,却在竞争中想不起来随喜别人的功德,看不到别人的优点,反而看到别人超过自己时内心不服,觉...
    福狮子阅读 1,675评论 0 1

友情链接更多精彩内容