android一种新的屏幕适配方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cly19940419/article/details/79789189

最近研究了一下android屏幕适配方案, 其实网上特别多的适配但是 我就感觉写的好高大上啊,但是一用到就是各种布局错乱 不能适配各种机型 。

  小生不才吐舌头写了一个简单的适配方案  你的布局里面的dp还是用你的dp ,什么都不用改变,你只需要几行子的代码 就可以搞定 

  当然 这个适配 不可能是万能的适配所有的手机委屈,毕竟市面上手机就是大杂烩啊,程序员的我表示很心痛大哭,好了废话我就不说了,相信你已经搜索了好多废话连篇的文章了偷笑;好吧我开始我的表演了,群众们鼓个掌吧大笑

   首先来看一下吧

              密度          分辨率
ldpi          0.75       320*240    
mdpi          1            480*320  
hdpi         1.5           800*480  
xhdpi       2.0            1280*720  

xxhdpi     3.0            1080x1920 


我们要利用这个类

      这个只是核心的代码

 activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() {    //这个是监听所有的activity
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {              
                density(activity, mWidth,mHeight);  //我们在这里获取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) {
            }
        };


 private static void density(Context context, float width , float height){
        Point point = new Point();     
        ((WindowManager)context.getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getSize(point);  //获取屏幕的数值     
        context.getResources().getDisplayMetrics().density = point.x/width*2f;   //context是我们获取activity里面的上下文  设置密度值  屏幕的宽/我们自己设置的主流分辨率*2f(表示这个主流分辨率的密度值这里以720*1280为准) 
        context.getResources().getDisplayMetrics().density = point.y/height*2f;       
    }
  
    public void start(){
        resetDensity(mApplication, mWidth,mHeight);  //里面的参数是类的构造方法保存过的
        mApplication.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
    }


没有更多推荐了,返回首页