码迷,mamicode.com
首页 > 移动开发 > 详细

Android最简单屏幕适配,项目用dp,sp的只需加一行代码

时间:2017-08-15 14:10:53      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:cti   led   gis   bsp   default   pause   idt   ide   lifecycle   

AutoScreenAdaptation

安卓屏幕适配 项目直接用dp和sp的可以不用改动 直接加入一句代码即可实现适配

还未确定会不会有兼容性问题和性能问题 需要时间测试

目前测试过模拟器的不同分辨率和不同dpi基本效果不会差太多

旋转屏幕 布局会按横版的大小缩放 视图也不会乱

支持x  y适配

效果图

 

技术分享
720x1280
技术分享
480x800

主要代码

public classScreenAdaptation {

privateApplication.ActivityLifecycleCallbacksactivityLifecycleCallbacks;

privateApplicationmApplication;

private  floatmWidth=720;

private  floatmHeight=1280;

publicScreenAdaptation(Application application,floatwidth,intheight) {

mApplication= application;

mWidth= width;

mHeight= height;

activityLifecycleCallbacks=newApplication.ActivityLifecycleCallbacks() {

@Override

public voidonActivityCreated(Activity activity, Bundle savedInstanceState) {

//开启Activity才执行

resetDensity(activity,mWidth,mHeight);

}

@Override

public voidonActivityStarted(Activity activity) {

}

@Override

public voidonActivityResumed(Activity activity) {

}

@Override

public voidonActivityPaused(Activity activity) {

}

@Override

public voidonActivityStopped(Activity activity) {

}

@Override

public voidonActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override

public voidonActivityDestroyed(Activity activity) {

}

};

}

/**

*注册

*/

public voidregister(){

resetDensity(mApplication,mWidth,mHeight);

mApplication.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);

}

/**

*注销

*/

public voidunregister(){

//设置为默认

mApplication.getResources().getDisplayMetrics().setToDefaults();

mApplication.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);

}

/**

* dp适配getResources().getDisplayMetrics().density

* sp适配getResources().getDisplayMetrics().scaledDensity

* pt适配getResources().getDisplayMetrics().xdpi

*@paramcontext

*@paramwidthui设计图的宽度

*@paramheightui设计图的高度

*/

private static voidresetDensity(Context context,floatwidth ,floatheight){

Point point =newPoint();

//获取屏幕的数值

((WindowManager)context.getSystemService(WINDOW_SERVICE)).getDefaultDisplay().getSize(point);

//dp适配getResources().getDisplayMetrics().density

context.getResources().getDisplayMetrics().density= point.x/width*2f;

context.getResources().getDisplayMetrics().density= point.y/height*2f;

//sp适配getResources().getDisplayMetrics().scaledDensity

context.getResources().getDisplayMetrics().scaledDensity= point.x/width*2f;

context.getResources().getDisplayMetrics().scaledDensity= point.y/height*2f;

}

}

使用:

public classAppextendsApplication{

@Override

public voidonCreate() {

super.onCreate();

//需要传入ui设计给的大小,初始化

newScreenAdaptation(this,720,1280).register();

}

}



作者:温开创
链接:http://www.jianshu.com/p/97b107308923
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android最简单屏幕适配,项目用dp,sp的只需加一行代码

标签:cti   led   gis   bsp   default   pause   idt   ide   lifecycle   

原文地址:http://www.cnblogs.com/xiaoliu500/p/7364559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!