万事须己运,他得非我贤。这篇文章主要讲述Android最简单屏幕适配,项目用dp,sp的只需加一行代码相关的知识,希望能为你提供帮助。
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
【Android最简单屏幕适配,项目用dp,sp的只需加一行代码】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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
推荐阅读
- java 安卓环境配置
- Android M 动态权限获取
- 从Handler+Message+Looper源代码带你分析Android系统的消息处理机制
- android context
- Android 全局使用第三方字体
- android UDP通信
- Java嵌套try块
- Java嵌套接口
- Java捕获多个异常