android 手机 多分辨率适配
近来在做android屏幕适配这方面的工作, 今天总算有点眉目. 小记一下
基础知识就不科普了, 网上一大堆. 作为一个刚接触这方面人, 最先进入我脑子的, 是从小到大的各种屏, 小到手表, 大到街头上看到的广告牌. 然后对这些不同大小的屏按使用方式来区分一下:
3.5 英寸以下的. 这个尺寸以下的手机比较少, 穿戴设备比较多
3.5 - 7 英寸 这个尺寸区间主要是手机
6 英寸以下的平板. 也是比较少的
6 - 11 英寸 这个区间主要是平板
手机和平板都是拿在手上的设备(当然也可以放在支架上看), 以7英寸作为尺寸分割点. 这个分割点决定了界面的布局, 即, 小于7英寸的屏用一套布局, 大于7英寸的屏用另一套布局(因屏的大小或者横竖使用, 得用到两到四套布局)
由于项目目前只考虑在手机上使用, 所以目前就只要考虑7英寸以下的屏, 就是说, 只要写一套布局就行了. 后期要做平板的话, 再写另外的布局. 用到fragment. 这个有点离题了, 不扯这个.
layout_width & layout_height 只用match_parent.
用px显然是不行的. 同样大小的屏, 分辨率低的屏显示出来的控件大, 分辨率高的屏显示出来的控件小, 随着分辨率的差异越来越大, 控件显示出来的大小差异也越来越大.
用wrap_content也是有问题的. 现在图片资源都放在drawable-x & mipmap-x 两个目录中.
drawable放.9图片以及一些selector, corner 用来控制这些.9显示风格的.
mipmap放图片资源. 后面的-x 是指 ldpi, mdpi, hdpi, xhdpi, xxhdpi. 每个目录下面放不同像素密度的图片资源. 如果把资源都放在某一个目录下面. 比如都放在xhdpi下面, 考虑同样大小的屏(手机屏的大小差异没多少), 那么在高分辨率屏的下面显示出来的图片就比较大, 而在低分辨率屏的下面显示出来的图片就比较小, 因为android系统将xhdpi下面的图片缩小了之后再拿到低分辨率屏下面使用, 所以变小了. 好了, 那么如果这些图片资源放在lhdpi下面呢 那么在低分辨率屏下面显示出来很清晰, 但是在高分辨率屏下面显示出来就很模糊了, 因为android系统将lhdpi下面的图片放大了之后再拿到高分辨率屏下面使用. 所以图片就变大, 也就变模糊了.
如果不想android系统放大或者缩小图片, 那就用高分辨率图片直接放在mipmap目录下面吧.
还是考虑差不多大小的手机屏, 不同的分辨率以及不同的长宽比. 其实对于长宽比固定的分辨率, 如果在布局文件中都是使用相对布局, 那么布局不会发生改变. 剩下的就是要考虑到长宽比不一样的分辨率了.
比如说一些常见的分辨率. {640*360} {960*540} {1280*720} {1920*1080} {2560*1440} 这几个分辨率的长宽比都是1.7777....
{1280*768} {800*480} 这两个长宽比是1.666...{1280*800} {2560*1600} 这两个长宽比是1.6
对于这些乱七八糟的长宽比, 同样的布局显示出来的效果就会有拉伸的效果了. 因长宽比值大小而决定拉伸效果.
后来就想用dimens来写不同分辨率下面对应的px, 然后在布局中直接使用dimens, 这样在不同的机型上面会用到不同的数值. 从而适配不同长宽比的屏. 但是这样做有两个问题. 一是这样的dimens太多,难以维护,就算做了主流的分辨率, 遇到一个分辨率未设置dimens的手机,显示出来的效果就非常糟糕. 二是有些手机它下面的那一排控制按钮是用软件实现的, 不是直接做在硬件上面的. 这就对界面的分辨率生产了影响.
从3.0以后, 对于要适配1280*720这样分辨率的屏, 之前的写法是写一个layout-1280x720这样的文件夹, 里面放置对应的dimens文件. 而现在要减去一个48px(状态栏的高度), 文件夹的名称就要写成layout-1232*720, 然后里面放置dimens文件, 但是我测试了一些机器发现读取不到这个文件, 找了一下问题, 发现不同的系统状态栏的高度是不一样的, 如果还要使用这样的解决方案的话, 那得先解决状态栏不一样高这个问题. @_@!!! 其实可以在values/dimens.xml中来设置这个状态栏高度, 不过我测试.
其实问题的根源就是控件无法在长宽上面设置相对的百分比. 然后想到了扩展控件修改自绘, 添加相对百分比的属性. 这样一想, 就先到网上找找有没有人 有过同样的想法并实现了的, 还真有! 参考下面的链接:
http://blog.csdn.net/lmj623565791/article/details/46767825
下面就是使用这个库了. 在使用的问题遇到一个问题:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_79\bin\java.exe'' finished with non-zero exit value 2这个问题是由于库冲突. 那只要把冲突的库排除了就可以了.
先在gradle.build中把这个库给注释掉第一个文件是库的引用, 在gradle.build中把下面的两个文件删除即可, 如下图
再运行, OK, 没问题了.
android 手机 多分辨率适配的更多相关文章
- 老李分享:android手机测试之适配(1)
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- Android开发——Android手机屏幕适配方案总结
)密度无关像素,单位为dp,是Android特有的单位 Android开发时通常使用dp而不是px单位设置图片大小,因为它可以保证在不同屏幕像素密度的设备上显示相同的效果. /** * dp与px的转 ...
- 老李分享:android手机测试之适配(2)
但 Android 版本低于 3.2 的设备不支持此技术,原因是这些设备无法将 sw600dp 识别为尺寸限定符,因此我们仍需使用 large 限定符.这样一来,就会有一个名称为 res/layout ...
- Android手机图片适配问题
需求:今天在做ListView的时候遇到一个问题,就是ListView中加载图片的时候.有些图片的大小比较大,所以会出现图片显示不充分的问题. 首先,再不做任何处理的情况下,大小是这样的.宽度是Wra ...
- Android 关于屏幕适配
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 转自:http://www.c ...
- Android多分辨率适配
前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...
- Android多分辨率适配经验总结
Android多分辨率适配是一件很有意义但是比较麻烦的事情,网上有很多关于多分辨率适配的文章,多数文章讲解的都是整个APP的图片比较规则,可以将图片做成9图来完成多分辨率适配,但是对于一些游戏类应 ...
- 【转】android多分辨率适配
前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...
- 【Android】Android中不同手机分辨率适配问题
在项目开发的过程中,同一个布局对应不同的手机会显示出不同的效果.导致这个现象产生的原因是不同手机的分辨率不同.在android sdk提供的帮助文档中,我们可以看到各种手机的分辨率和对应的屏大小.QV ...
随机推荐
- 标 题: [心得]传统IT转互联网面试经验分享
发信人: lgonnet (逃之夭夭), 信区: Java标 题: [心得]传统IT转互联网面试经验分享发信站: 水木社区 (Wed Jul 1 10:18:38 2015), 站内 统一回复一下 ...
- IBM Thread and Monitor Dump Analyzer for Java解决生产环境中的性能问题
这个工具的使用和 HeapAnalyzer 一样,非常容易,同样提供了详细的 readme 文档,这里也简单举例如下: #/usr/java50/bin/java -Xmx1000m -jar jca ...
- The Secret Mixed-Signal Life of PWM Peripherals
The Secret Mixed-Signal Life of PWM Peripherals Pulse-width modulation (PWM) peripherals have enjoye ...
- 如何在本地搭建一个Android应用crashing跟踪系统-ACRA
https://github.com/bboyfeiyu/android-tech-frontier/tree/master/others/%E5%A6%82%E4%BD%95%E5%9C%A8%E6 ...
- unity 打包编译记录
1.放到Plugins目录下的贴图不会打包进去 2.放到Plugins目录下的dll会自动打包,代码也会打包 3.放在Resources目录下的资源会自动打包 4.放在StreamingAssets目 ...
- tomcat支持https的server.xml配置
访问地址:https://127.0.0.1/testWeb/mySevlet?url=123&action=aaa server.xml: <?xml version='1.0' en ...
- HTML5 background-color和background-image问题共用问题
在HTML5中支持背景图片和背景颜色在一个标签中同时渲染. 一般的需求是为元素指定背景颜色,然后在背景色的商品绘制背景图. 支持:Google,FF,IE9以上浏览器. 基本原则:先设置背景图片,再指 ...
- 深入理解 Java try-with-resource 语法糖
背景 众所周知,所有被打开的系统资源,比如流.文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故. 在Java的江湖中,存在着一种名为fina ...
- MDX Cookbook 11 - 计算 Year Over Year 增长 (同比计算) ParallelPeriod
这一小节主要介绍如何在一个平行期间的度量值,当前值的对比对象是指当前值的上一年,上一个季度或者其它时间级别上与当前值同一时间点上的的那个对象.有一个非常常见的需求就是对比上一年同一个时间点的某个值来判 ...
- DataGuard---->物理StandBy的角色切换之switchover
Switchover,无损切换,通常是用户手动触发或者有计划地让其自动触发,如硬件升级等. 步骤: 1.Primary数据库转换为StandBy角色 2.StandBy数据库(之一)转换为Primar ...