Android 多屏适配解决方式
1.主流手机必要測量的參数(通过详细的方法。測量出,须要測试手机的 以下的这些參数,我们主要使用的仅仅是 screenwidth 这个參数,其它參数仅仅是帮助我们更好的理解
屏幕适配)
DisplayMetrics metric = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5/2.0)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240/320)
int screenWidth = (int) (width / density);//屏幕宽度(dp)
int screenHeight = (int) (height / density);//屏幕高度(dp)
AppContext.getAppContext().setDpHeight(screenWidth);
AppContext.getAppContext().setDpWidth(screenHeight)
Log.i("pixel", "width:" + width + "height:" + height + " density:" + density + " densitydpi" + densityDpi);
详细手机型号,相应的输出參数
华为 ht:960 density:1.5densitydpi240 screenWidth360 screenHeight640
米2 +++width:720 height:1280 density:2.0 densitydpi320 screenWidth360 screenHeight640
HM1s +++width:720 height:1280density:2.0 densitydpi320 screenWidth360 screenHeight640
MI 3 +++width:1080 height:1920density:3.0 densitydpi480 screenWidth360 screenHeight640
GT-I9507v +++width:1080 height:1920density:3.0 densitydpi480 screenWidth360 screenHeight640
荣耀3c +++width:720 height:1280 density:2.0 densitydpi320 screenWidth360 screenHeight640
华为 G730-U00 +++width:540 height:960 density:1.5 densitydpi240 screenWidth360 screenHeight640
华为 A199 +++width:720 height:1280density:2.0 densitydpi320 screenWidth360 screenHeight640
努比亚Nx507J +++width:1080 height:1920 density:3.0 densitydpi480 screenWidth360 screenHeight640
联想K910 +++width:1080 height:1920 density:3.0 densitydpi480 screenWidth360 screenHeight640
华为P6 +++width:720 height:1184 density:2.0 densitydpi320 screenWidth360 screenHeight592
Coolpad 8675 width:720 height:1280 density:2.0 densitydpi320 width 360 height 640
华为 G520 +++width:480 height:854 density:1.5 densitydpi240 screenWidth320 screenHeight569
HTC T528w +++width:480 height:800density:1.5 densitydpi240 screenWidth320 screenHeight533
三星 N7000 width:800height:1280 density:2.0densitydpi320 width 400 dp height 640 dp
2.依据google api 提供的
适配命名优先级,国家,sw參数dp 等等 ,类似 values-1920x1080 这样的书写方式,官方api上没有详细进行说明。可是经过測试的却能够使用这样的方式进行适配,缺点就是
须要定义非常多类似这种配置參数。
3.第三点。须要在项目values -dimens(基础为系统默认提供),写下详细的适配參数,因为考虑到如今收据的screenwidth 都是在320dpi之上。所以。我们项目中使用1dp=2px 作为基础dimens适配參数,这样
我们就须要依据不同的手screenwidth建立不同的 sw目录
sw320dp
sw360dp(较多)
sw400dp
sw480dp(市面上较少)
4.依据基础适配參数320dp,假设我们须要适配360dp则须要,使用(360/320)*基础dimens參数,一側类推,假设是400dp适配,则使用(400/320)*基础dimens參数
5.依据不同的适配须要,首先在基础dimens中进行配置,然后。測试各个手机适配情况进行对应的调整
总结:之前适配。是从网上找的一段代码。经全部的适配条件。依据比值(0.75/1/1.5/2)事先计算好。然后须要适配的地方使用自己计算好的參数。
这样适配肯定是不行,
后期维护成本较高,适配效果不够精细。
以上都是手动敲上去的,。由于之前做适配,没去读google api 造成走了非常大的弯路。
google api 多屏适配上面写的都是清清楚楚的,我们參照各市面上几个较有名的apk,都是这样实现的,京东的apk大家能够反编译看看,里面的适配使用了5种之多。(这是非常笨的方式)。淘宝。微信,Facebook。sina client。均没有採用京东的做法。
适配后的文件:
Android 多屏适配解决方式的更多相关文章
- Unity与Android刘海屏适配
本周学习Unity与Android刘海屏适配 关于刘海屏适配部分 网上有很多教程 这里只是做一下整理 https://blog.csdn.net/xj1009420846/article/detail ...
- Android刘海屏适配 ----- ImmersionBar
android 4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换.刘海屏.软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色,以及不可修改字体颜色手机的适配,适用于Activity.Fr ...
- android程序报错“error launching activity com.android.ddmlib.shellcommandunresponsiveexception”的解决方式
今天在调试android程序的时候,因为是NDK开发,要先编译.so库再打包下载到android模拟器,所以花费的时间比較长.控制台就会报例如以下错误: error launching activit ...
- Android 之UI自适应解决方式
1.概况 作为Android开发者,最头疼的莫过于让自己开发的程序在不同终端上面的显示效果看起来尽量一致(当然.假设要充分利用大屏幕的优势另当别论).在全球范围内来讲.android有着数以亿计的设备 ...
- win8装win7出现蓝屏的解决方式
今天用PE装系统,在进入PE前会出现蓝屏: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzAxODcyMQ==/font/5a6L5L2T/fo ...
- 【Android多屏适配】动态改变Listview item高度
在ListView的Adapter中去直接获取传入View的LayoutParams是会报空指针异常的,唯一的方法是在xml中嵌套布局一层LinearLayout <?xml version=& ...
- 【转】Android横竖屏切换问题
Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...
- Android横竖屏切换总结
Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...
- Android横竖屏切换处理
Android横竖屏要解决的问题应该就两个: 1.布局问题:2.重新载入问题 一.布局问题: 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你 ...
随机推荐
- SWD Registers
- [转].net reactor 学习系列(五)---源代码加密程序
.NET Reactor使用教程(加密源代码示例) 1.打开 Eziriz .NET Reactor,主界面如图1所示: 图1 2.单击 Main Assembly 右边的 Open,选择要加密的软件 ...
- VMware Workstation Pro 12 桥接联网(物理主机:Windows 7,虚拟机:CentOS 6.8)
物理主机:Windows 7,虚拟机:CentOS 6.8 1.设置虚拟机的 默认路径:编辑 -> 首选项 -> 设置“虚拟机的默认位置” 2.设置 虚拟网络:编辑 -> 虚拟网络编 ...
- stanford CS DB 课程 数据库系统实现
http://infolab.stanford.edu/db_pages/classes.html CS145: Introduction to Databases CS245: Databa ...
- Task Parallel Library02,更进一步
在前一篇中,了解了Task的基本用法 如果一个方法返回Task,Task<T>,如何获取Task的返回值,获取值的过程会阻塞线程吗? static void Main(string[] a ...
- android模拟器修改时间
我们看右上角的模拟器的时间,是不是和我们现在时间不同步呢 点击主菜单之后,我们找到下边的设置的按钮 下边找到时间和日期, 怎么把页面修改中文, 可以看(安卓模拟器怎么修改语言)的经验 ...
- 【多线程】java多线程实现生产者消费者模式
思考问题: 1.为什么用wait()+notify()实现生产者消费者模式? wait()方法可以暂停线程,并释放对象锁 notify()方法可以唤醒需要该对象锁的其他线程,并在执行完后续步骤,到了s ...
- ios之如何读取plist
- (NSDictionary*)contactsInfoFromPlistNamed:(NSString*)plistName { NSString *path = [[NSBundle mainB ...
- iis 7上发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容
iis 7上发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 使用 II ...
- EditText的监听器和自定义回车事件
我们一般是监听EditText的状态,看EditText中是不是有文字,根据有无进行不同的操作. // 给editText添加监听器 editText.addTextChangedListener(n ...