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 ...
随机推荐
- yum安装与源码编译安装实际使用区别
总结一些我实际生产使用的区别: 1.yum安装不是说不行,都行,各有千秋. 2.yum安装目录不集中,但基本遵循Linux文件夹的作用去划分文件,比如配置文件通常在/etc下. 3.yum安装说的模块 ...
- nagle算法和TCP_NODELAY
写socket发现的一个诡异现象,当时将多个小数据写操作合并成一个写操作,问题就没了.Chenshuo同学还建议我设置TCP_NODELAY,只是后来因为事情忙,也就没有再深究下去. 现在大概明白,是 ...
- SpringBoot 2.x 整合ElasticSearch的demo
SpringBoot 2.x 整合ElasticSearch的demo 1.配置文件application.yml信息 # Tomcat server: tomcat: uri-encoding: U ...
- gdb 拾遗
1,跳过某个特定信号 (gdb) handle SIGPIPE nostop noprint pass 2,break在特定的系统调用处 (gdb) catch syscall 3 3,遇到一个断点的 ...
- Nginx 日志自动分割
Nginx 的日志都是写在一个文件当中的,不会自动地进行切割,如果访问量很大的话,将导致日志文件容量非常大,不便于管理和造成Nginx 日志写入效率低下等问题.所以,往往需要要对access_log. ...
- GDB 调试器使用手冊
使用GDB: 本文描写叙述GDB,GNU的原代码调试器. (这是4.12版1994年一月.GDB版本号4.16) * 文件夹: * 摘要: GDB的摘要 * 实例: 一个使用实例 * 入门: 进入和退 ...
- vue遍历时添加个数过滤条件
1.效果 本身有5个地址,显示3个 2.address.html <!DOCTYPE html> <html lang="en"> <head> ...
- Asp.Net 简繁转换
帮助类 /// <summary> /// 中文字符工具类 /// </summary> public static class ChineseStringUtility { ...
- MobaXterm 加装cygwin软件包
上次在<MobaXterm: SSH/X远程客户端, Xmanager的最佳免费替代品>里面介绍了MobaXterm这个Windows上的便携 多合一unix工具箱,它基于Cygwin,集 ...
- Nginx的upstream目前支持5种分配方式
本文转自:http://mp.weixin.qq.com/s?__biz=MzI4OTU3ODk3NQ==&mid=2247484058&idx=1&sn=f4da816bfa ...