最近研究了一下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); }