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

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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间: 2024-10-27 07:48:00

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

Android 多分辨率多屏幕适配

请参见文章:http://blog.csdn.net/jiangxinyu/article/details/8598046 文章描述非常清晰. Android 多分辨率多屏幕适配

android下在屏幕适配小总结

为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在xml中写dip(这个还是可以的),前面两种感觉过程工作量太大了,由加载大图片的优化思想 同样对一个小算法来实现此功能.. 先来测试代码: package cn.marsXTU.Screenadapter; import android.os.Bundle; import android.app.Activity; import android.content.Context; impor

Android一个简单的警告框,带标题、图标、按钮的代码

工作之余,将内容过程比较常用的内容做个珍藏,下面内容是关于Android一个简单的警告框,带标题.图标.按钮的内容,应该是对大伙有些用. AlertDialog alertDialog = new AlertDialog.Builder(this).create();alertDialog.setTitle("Title");alertDialog.setMessage("Message");alertDialog.setButton("OK",

Android省市县三级联动 真实项目抽出 调用只需3行代码 源码免积分下载

写在前面:没想到短短一夜之间就有910次阅读量,迄今为止最高阅读量的一篇,小激动! 项目源码:包含日期.省市县两种选择器[资源积分:0分] ,APK安装包下载,没有CSDN账户的的点此下载源码 fastjson:自己复制博客里源码的小伙伴,注意导入fastjson框架哦!阿里巴巴出品的最快json解析框架 日期选择器:效果图中的选择年月日的日期选择器 任何问题,欢迎评论:源码下载不成功的留下邮箱:文章我还在维护,持续优化,有问题的小伙伴积极评论哈. 先上效果图: 样式可以修改xml文件 省市县三

【转】Android中的长度单位详解(dp,sp,px,in,pt,mm)

原帖地址:http://blog.csdn.net/nokiaguy/article/details/5509638 原帖作者:geekguy 看到有很多网友不太理解dp.sp和px的区别:现在这里介绍一下dp和sp.dp也就是dip.这个和sp基本类似.如果设置表示长度.高度等属性时可以使用dp 或sp.但如果设置字体,需要使用sp.dp是与密度无关,sp除了与密度无关外,还与scale无关.如果屏幕密度为160,这时dp和sp和px是一 样的.1dp=1sp=1px,但如果使用px作单位,如

Android 多屏幕适配 dp和px的关系

一直以来别人经常问我,android的多屏幕适配到底是怎么弄,我也不知道如何讲解清楚,或许自己也是挺迷糊. 以下得出的结论主要是结合官方文档进行分析的https://developer.android.com/guide/practices/screens_support.html android由于碎片化太严重,而导致市面上出现非常多的种类尺寸手机设备,当然也包括非常奇葩的分辨率手机.所以我们在布局的时候使用px作为单位显然不能很好的做到多屏幕的适配.其实在官方文档中有介绍一种解决多屏幕适配的

Android开发之Ruby实现Android自动化屏幕适配

背景:我相信对于Android开发者来说,屏幕适配一直是你心中的痛-,为了让Android开发者从屏幕适配的痛苦中解脱出来,我决定实现这个Android自动化屏幕适配的1.0版本.下面来讲一下思路. 首先以values-w360作为标准也就是360dp,对应的设备就是720×1080俗称的720P的屏幕,也就是说设计师给的设计稿是以720P的屏幕作为设计图的,那么如果设计图上面的尺寸是100px,那么我们就需要用100/2 = 50dp得到我们的这个标准值,以此类推,将app中所有需要适配的尺寸

Android屏幕适配攻略

Android适配攻略 一.屏幕适配的必要性 为什么Android需要适配? 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对Android进行定制,修改成他们想要的样子. 但是这种"碎片化"到底到达什么程度呢? 在2012年,OpenSignalMaps(以下简称OSM)发布了第一份Android碎片化报告,统计数据表明, 2012年,支持Android的设备共有3997种. 2013年,支持Android的设备共有11868种. 2014年,支持Andr

Android屏幕适配框架-(今日头条终极适配方案)

在Android开发中,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈 我们之前做屏幕适配一般都会用到一下两种方式: 第一种就是宽高限定符适配,什么是宽高限定符适配呢 ├── src/main│   ├── res│   ├── ├──values│   ├── ├──values-800x480│   ├── ├──values-860x540│   ├── ├──values-1024x600│   ├── ├──values-1024x768│