不同分辨率下容易出现的问题

  • 欢迎加入QQ交流3群:317874559
       由于目前android设备的分辨率种类很多,在开发的时候不注意进行屏幕适配的话会出现很多问题。比如高分辨率和低分辨率下的图片显示问题,在高分辨率下显示低分辨率图片显示质量下降。
还有屏幕长宽比不同的情况下会出现布局移位,甚至是整个页面错乱的情况。还有字体设置,在不同分辨率下使用同一字体可能会导致字体显示大小不一的情况。
      以上问题,有的可以通过变量使用非固定值来解决,有的可以通过google官方提供的方法进行解决,有的则需要使用一些特殊方法来进行解决。以下是我调查的一些方法可以供大家参考。
屏幕分辨率中的几个概念
以下是根据Google官方文档翻译过来的屏幕分辨率中的一些概念。
1.屏幕尺寸:屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如2.8寸,3.5寸)。Android把所有的屏幕尺寸简化为三大类:大,正常,和小。程序可以针对这三种尺寸的屏幕提供三种不同的布局方案,
然后系统会负责把你的布局方案以合适的方式渲染到对应的屏幕上,这个过程是不需要程序员用代码来干预的。
2.  屏幕长宽比:屏幕的物理长度与物理宽度的比例。程序可以为制定长宽比的屏幕提供制定的素材,只需要用系统提供的资源分类符long和notlong。
3.  分辨率:屏幕上拥有的像素的总数。注意,虽然大部分情况下分辨率都被表示为“宽度×长度”,但分辨率并不意味着屏幕长宽比。在Android系统中,程序一般并不直接处理分辨率。
4 .密度:以屏幕分辨率为基础,沿屏幕长宽方向排列的像素。密度较低的屏幕,在长和宽方向都只有比较少的像素,而高密度的屏幕通常则会有很多——甚至会非常非常多——像素排列在同一区域。屏幕的密度是非常重要的,举个例子,长宽以像素为单位定义的界面元素(比如一个按钮),在低密度的屏幕上会显得很大,但在高密度的屏幕上则会显得很小。
5.  密度无关的像素(DIP):指一个抽象意义上的像素,程序用它来定义界面元素。它作为一个与实际密度无关的单位,帮助程序员构建一个布局方案(界面元素的宽度,高度,位置)。一个与密度无关的像素,在逻辑尺寸上,与一个位于像素密度为160DPI的屏幕上的像素是一致的,这也是Android平台所假定的默认显示设备。在运行的时候,平台会以目标屏幕的密度作为基准,“透明地”处理所有需要的DIP缩放操作。要把密度无关像素转换为屏幕像素,可以用这样一个简单的公式:pixels = dips * (density /160)。举个例子,在DPI为240的屏幕上,1个DIP等于1.5个物理像素。我们强烈推荐你用DIP来定义你程序的界面布局,因为这样可以保证你的UI在各种分辨率的屏幕上都可以正常显示。
官方文档中的建议
Google官方文档中提出了一些关于屏幕分辨率适配的建议。
1  声明最小支持分辨率:在manifest文件中声明android:requiresSmallestWidthDp、android:compatibleWidthLimitDp、android:largestWidthLimitDp,限定分辨率。
2  在分辨率中使用wrap_content, fill_parent,或者dp单位。例如,在layout_width="100dp"这个声明下,如果是中等分辨率屏幕下代表着100个像素点宽的距离,而在高等分辨率屏幕下代表着150像素点的距离。同样的,你可以使用sp单位来定义字体大小。
3  在代码中尽量不使用硬性定义。使用myView.getWidth()在当前屏幕下得到了10的值,但是可能在另一个屏幕下会得到15的值。所以在代码中使用硬性定义的话,会导致屏幕不适配的问题。
4  不使用绝对布局。绝对布局是根据像素点排列的,在项目中推荐使用相对布局。
5  针对不同尺寸和不同密度采用不同的资源。尽管系统可以自动识别屏幕大小并作出资源图片的调整,如果想让图片资源保持不同方向比例一致的话,还是在资源中添加多个资源。如果需要精确地摆放图片位置的话,建议修整图片到合适的大小,并根据图片密度放在不同的文件夹下,例如drawable-mdpi和drawable-ldpi里。

调查到的解决方法几种

以下是根据网上的一些方法总结的解决方法,都已经做过实例测试方法可用,但是没有在具体的项目中使用过,可以参考。
       在布局文件中使用weight来控制位置。将控件的layout中的width、height设置为fill-parent,不要使用wrap-content。因为wrap-content的大小是不固定的。而weight(权重)这个属性很好的解决了这个问题。当包裹在控件外面的Layout的width、
height属性都设置为fill-parent时,可以利用weight的反比特性。即如果控件A设置weight为9,控件B设置weight为20,那么A所占的空间为20/(9+20),B所占的空间为9/(9+20)。这样的反比属性对任何分辨率下的手机都是合适的。
      在布局文件中使用weight也可以使用wrap-content,这时的话就是正比例计算,即如果控件A设置weight为9,控件B设置weight为20,那么A所占的空间为9/(9+20),B所占的空间为20/(9+20)。缺点是当content内容的大小特殊的情况下,
这个比例不会被执行。
      字体大小的设置。需要在res文件夹中创建一个文件夹,叫做values-1280x720。其中1280x7200是手机屏幕的分辨率,根据手机屏幕的情况做不同的命名,例如values-800x480。在该文件夹下创建一个dimens.xml文件,定义各种字体的大小。
那么系统就会自动根据你手机屏幕的分辨率去调用响应的文件夹。需要注意的是,一定要保留res里默认的dimens.xml文件,这样的话可以再屏幕分辨率不适应的情况下找到字体大小。

屏幕自适应可能会出现识别错误问题,加载了低分辨率图片到中分辨率手机上,这个时候也可以删除掉drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹,创建一个drawable文件夹即可。也可以将资源文件放入assets中,
因为assets中的资源系统永远不会为其生成id,所以不会智能缩放。还有设置最低版本,把1.5以下的版本支持去掉也可以产生一些作用。

     一些比较极端的情况,比如1280x800 1280x768 1280x720,这里可以使用一个兼容性的布局,如果里面含有图片而且对于宽度要求十分精确地话,
建议修正图片大小或者做填充处理(在边缘为纯色的情况下将背景填充为和边缘颜色一样的色值即可)。
Android9 patch 图片 (.9.png 格式图片) 的特点和制作
一.9.png格式的文件的特点
   与传统的png 格式图片相比, 9.png 格式图片在图片四周有一圈一个像素点组成的边沿,该边沿用于对图片的可扩展区和内容显示区进行定义。
    这种格式的图片在android 环境下具有自适应调节大小的能力。(1)允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更大区域时,可扩展区的内容被延展。(2)允许开发人员定义内容显示区,用于显示文字或其他内容. 如下图所示:左侧和上方的黑线交叉的部分即可扩展区域,右侧和下方的黑线交叉的部分即内容显示区.
                              
二 .9.png 图片的制作
  android sdk 的 tools文件夹下提供了制作该格式图片的工具 draw9patch.bat。使用此工具打开任意图片之后,将鼠标置于图片上。
  被黑色覆盖的是不可编辑(锁住)的区域,周围的一圈一个像素的边沿是可编辑区域。按住鼠标左键,在左侧和上方的边沿画出可扩展区。在右侧和下方画出内容显示区。
        
  完成绘制以后,选择file-> save ,即可保存为 .9.png 格式的文件,并在android项目中使用。
实际项目中,其他公司决绝方案
案例一
1.屏幕大小
  在res目录下创建不同的layout文件夹,比如:layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
2.字体自适应大小

首先根据不同分辨率获取不同字体大小。 
在RES里创建
values-480x320/strings.xml 里面设置<dimenname="Text_size">30px</dimen>
和 values-800x400/strings.xml 里面设置<dimenname="Text_size">30px</dimen>
分别代表480X320 和 800X400分辨率情况下 字号为30px和40px;
在java文件中这样调用:int sizeOfText = (int)this.getResources().getDimension(R.dimen.Text_size);

案例二
用密码获取屏幕宽高,根据图片原比例,在代码中自己设置高宽。
WindowManager wm = (WindowManager) this
                                .getSystemService(Context.WINDOW_SERVICE);
                width= wm.getDefaultDisplay().getWidth();// 屏幕宽度
                minHight= width * 381 / 480;
                calenderTableLayout.setMinimumHeight((int)minHight);
案例三
        做一张超大的图片,然后等比例缩小图片,来进行图片的适配。

android屏幕分辨率适配总结相关推荐

  1. android屏幕分辨率适配

    分辨率 高度 宽度 宽高比(宽/高) 1920x1080 1920 1080 0.5625 2094x1080 2094 1080 0.5157593123 2220x1080 2220 1080 0 ...

  2. Android Studio 屏幕分辨率适配

    android studio进行android 应用屏幕分辨率适配使用建立不同dimens.xml方法,刚开始建立的文件夹都叫 values-1280x720 values-800x400之类的,发现 ...

  3. Android屏幕尺寸适配常见方案smallestWidth

    前言 介于目前的Android设备存在有不同的屏幕尺寸,屏幕分辨率,像素密度,Android应用在开发的过程必须要考虑到屏幕尺寸适配的问题,以保证在不同尺寸的Android设备上都能够正常运行. 基本 ...

  4. android 常见分辨率率,Android屏幕分辨率占有率分析及应用

    Android屏幕分辨率各种各样,碎片化严重,开发者苦不堪言,转身看看iOS开发同学,只要适配2个尺寸的屏幕就好了,= =! 但我们总是能克服的对不,假如我们现在有这么一个需求: 我们将满屏显示一张网 ...

  5. android屏幕分辨率自适应问题

    前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文档 郭霖: Android官方提供的支持不同屏幕大小的全部方法 Stormzhang ...

  6. Unity 利用NGUI做屏幕分辨率适配+学习UIDraggablePanel的使用

    2019独角兽企业重金招聘Python工程师标准>>> 大家使用unity,一定有看中其跨平台的强大功能,因此也难免会遇到不同屏幕分辨率适配的问题. 先说说UIRoot.在新版本的n ...

  7. 大屏项目屏幕分辨率适配

    一.大屏项目屏幕分辨率适配:1366*768 和 1920*1080 和 2560*1440 和 4096×2160 二.css方案选择:css的宽高以什么为单位? 1.字体大小以 "相对单 ...

  8. Android屏幕亮度适配

    Android屏幕亮度适配 前言 最近由于接手了视频项目中的亮度调整功能,抽空总结了下Android亮度调节的方式,以及在如今系统定制化的情况下会遇到的坑. 亮度调节模式 查看官网说明,可以看到,目前 ...

  9. android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

    为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...

最新文章

  1. vip能ping通,但80不通的解决方法
  2. 入职阿里啦!极客时间kotlin
  3. 【机器学习PAI实践六】金融贷款发放预测
  4. 节能原理 (能量平衡)
  5. Android ViewModel详解
  6. win oracle 重启命令,Windows下命令行如何启动Oracle10g?
  7. Linux scp 指令
  8. 一分钟,六张图让您看懂Linux系统对程序员的重要性。
  9. dataframe 输出标题_【学界】第八章:Python代码之数据输出、调参与算法总结
  10. 用c语言编电话薄系统,求助 哈稀表编电话薄程序(c语言) 算法
  11. .NET,你忘记了么?(六)——再谈String
  12. 给定一个字符串,若是回文字符串则返回该字符串,否则补充该字符串成为回文字符串
  13. 电脑中病毒了一直下载安装软件怎么办?
  14. 三原色是红黄蓝对吗_三原色是哪几种颜色?是红黄蓝,还是红绿蓝
  15. HTML网页设计制作 dreamweaver网页源代码 北京故宫旅游景点网站设计
  16. 深度解析大快DKadoop大数据运维管理平台功能
  17. HTML5APP商业开发实战教程——基于WeX5可视化开发平台
  18. uni-app实现简单上传图片Demo(不考虑小程序,只实现网页和App)
  19. 下载微信视频号视频的憨批方法
  20. etcher刻录以后U盘容量只有12M,如何恢复容量?

热门文章

  1. 数据可视化之汽车销量,截止到2022年目前中国汽车保有量是3.02亿辆
  2. 实现css六边形边框,css 这种六边形的边框怎么画?
  3. 车牌识别matlab,车牌识别matlab实现(蓝色车牌和新能源车牌)
  4. php随机生成汉字、随机字符串
  5. 原来做图标这么简单!
  6. 全新在线制作banner网站广告横幅源码
  7. mac系统ssh可视化工具zoc的简单使用
  8. 相机ISP图像处理流程
  9. ceph bluestore中的磁盘空间管理
  10. 引流产品分几类?引流产品结构四类定位产品