最近因为android的发展广泛,应用逐渐增多,更多的特性被人们多了解,运行平台也逐渐扩大。
从最开始的手机平台到如今的平板电脑、液晶电视等等各种电子产品,光手机的分辨率就不知道到底有多少种
因为在中国你永远不知道到底有多少山寨开发商开发了多少屏幕的手机以及平板,液晶电视更是不用说,几十几百个
手机屏幕的大小。
   

1、基本概念
      屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸)。android把屏幕分为以下4种:small,normal,large,extra large。
怎么判断?
     屏幕密度(Screen Density) - 一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点)。相比起medium、high屏幕密度的设备,在一块确定大小的屏幕区域l密度为low的屏幕拥有的像素更少。android把屏幕密度分为4种:low,medium,high,extra high。
如何判断是ldpi,mdpi,hdpi?
    方向(orientation) - 屏幕方向分为landscape(横屏)和portrait(竖屏)。
    分辨率(Resolution) -  屏幕上的总实际像素数。对屏幕进行适配时,一般不关注它的分辨率,只关注它的屏幕大小和密度。
     与密度无关的像素(Density-independent pixel,dp或dip) -   为了保证你的UI适合不同的屏幕密度,建议你采用dp来定义程序UI。
它的计算方法为:px = dp * (dpi / 160)


如何分辨一个屏幕是ldpi、mdpi、hdpi的方法呢?

2、怎样适配多种屏幕

a.在manifest里定义你的程序支持的屏幕类型,相应代码如下:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]   //是否支持小屏
android:normalScreens=["true" | "false"]  //是否支持中屏
android:largeScreens=["true" | "false"]   //是否支持大屏
android:xlargeScreens=["true" | "false"]  //是否支持超大屏
android:anyDensity=["true" | "false"]    //是否支持多种不同密度的屏幕
android:requiresSmallestWidthDp=”integer”
android:compatibleWidthLimitDp=”integer”
android:largestWidthLimitDp=”integer”/>
      b.对不同大小的屏幕提供不同的layout。
      比如,如果需要对大小为large的屏幕提供支持,需要在res目录下新建一个文件夹layout-large/并提供layout。当然,也可以在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

     c.对不同密度的屏幕提供不同的图片。
     应尽量使用点9格式的图片,如需对密度为low的屏幕提供合适的图片,需新建文件夹drawable-ldpi/,并放入合适大小的图片。相应的,medium对应drawable-mdpi /,high对应drawable-hdpi/,extra high对应drawable-xhdpi/。
图片大小的确定:low:medium:high:extra high比例为3:4:6:8。举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra high为96×96。
drawable-hdpi 该图片即适用于横屏,也适用于竖屏drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源
drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源
   
      d.在代码中动态更改密度值。
      有时候会根据需要在代码中动态地设置某个值,比如地图地址提示框相对偏移量在不同密度的手机上是不同的。这时候可以通过以下方法求出屏幕密度:
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240)
然后可以在代码中为这几种密度分别设置偏移量
但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。
这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置。

3、多屏幕适配的4条黄金原则
         a.在layout文件中设置控件尺寸时应采用wrap_content,fill_parent和dp。
       具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,fill_parent或dp比pix更好。相应地,为了使文字大小更好的适应屏幕应该使用sp来定义文字大小。
       b.在程序的代码中不要出现具体的像素值。
为了使代码简单,android内部使用pix为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕,android建议开发者不要使用具体的像素来表示控件尺寸。
      c.不要使用AbsoluteLayout,这个已经很少用了,应使用RelativeLayout。
      d.对不同的屏幕提供合适大小的图片。
      4、怎样测试你的程序是否支持多屏幕适配
      一般使用AVD Manager创建多个不同大小的模拟器,如下图

手机、平板多屏幕多分辨率适配相关推荐

  1. android 屏幕像素密度计算器,手机/平板电脑屏幕PPI计算器

    [divider] 什么是PPI? PPI是pixels per inch的字幕缩写.即每英寸所拥有的像素数目,表示的是每英寸所拥有的像素(pixel)数目. 分辨率(resolution,港台称之为 ...

  2. 【可视化大屏】屏幕多分辨率适配方案

    一.任意屏幕下保持16:9的比例等比缩放 https://blog.csdn.net/weixin_57756140/article/details/123681114 1.背景 数据大屏项目,需要适 ...

  3. 数据可视化大屏,屏幕多分辨率适配方案,且在任意屏幕下保持16:9的比例等比缩放

    背景 数据大屏项目,需要适配不同屏幕,且在任意屏幕下保持16:9的比例,保持显示效果一致,屏幕比例不一致两边留黑即可 分析 不同屏幕宽高比例(和设计稿16:9)相比会有两种情况: 1.更宽:(wind ...

  4. 【Android 屏幕适配】屏幕适配基础概念 ④ ( 屏幕适配限定符 | 手机/平板电脑设备屏幕适配 )

    文章目录 一.屏幕适配限定符 二.手机/平板电脑设备屏幕适配 平板电脑市场占有率 密度无关像素计算 手机设备限定符 平板设备限定符 参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 声 ...

  5. 华为大手机 m3 linux,EMUI 5.0来啦 华为平板M3将首先适配

    俗话说得好,新年新气象,广大的消费者希望在2017年中华为平板 M3可以带来全新的体验. [PChome平板电脑频道资讯报道]2016年9月,华为退出了全新的旗舰平板产品华为平板M3,这款以影音体验为 ...

  6. 手机浏览器客户端交互设计适配之——屏幕大小

    以下内容来自于淘宝UED 随着各个手机操作系统的应用平台的上线,几乎所有的互联网应用都在往手机上迁移.然而手机与PC 不一样,PC经过了多年的发展,在设计上形成了很多不成文的规则,如网页的宽度都在96 ...

  7. 电脑投屏到手机/平板上做第二屏幕(显示器)

    准备工具 电脑版:Splashtop Wired XDisplay 手机版:Splashtop Wired XDisplay(安卓APK/苹果IOS) USB数据线 下载地址 (包含电脑+安卓手机端) ...

  8. Android手机 全面屏(18:9屏幕)适配指南 点击打开链接

    Android手机 全面屏(18:9屏幕)适配指南 点击打开链接 从小米MIX 1发布以来,越来越多所谓"全面屏"手机发布,如三星S8,小米MIX2,VIVO X20,Google ...

  9. 多屏幕多分辨率的支持和一些概念

    Android 是一个系统,运行在这个系统上的很多设备它们的屏幕大小和密度都不一样.但我们需要解决这个问题.本节为详细的为你解释一些基础概念和教你怎么处理关于多屏幕多分辨率的支持. 虽然系统会根据不同 ...

最新文章

  1. 在线使用Octave、Matlab画单电荷等位线和电力线、matlab的nonconformant arguments错误
  2. 使用Memcached提高.NET应用程序的性能
  3. javascript--弹出对话框 四种对话框 获得用户输入值 .
  4. mysql快照过久_Oracle 快照(snapshot) 管理
  5. MiniGui移植详解1【转】
  6. 不以跬步无以致千里——Day1
  7. UE4之ACharacter移动人物并显示动画效果
  8. 也看《猎场》:几经秋冬,青春不在,一切皆贾,蓦然回首,伊人如故
  9. 一个意想不到的CDO.Message 错误
  10. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_02-项目概述-功能构架-功能模块和项目原型...
  11. linux在路径下创建文件,从可以在Linux中打开的文件路径创建文件
  12. 科勒公司成为曼联的主要合作伙伴
  13. 三大开源bi工具_不用无限手套,人人都能开发 BI 系统------开源BI软件,可集成的BI工具...
  14. ant design vue 修改 table 的默认分页的pageSize
  15. 硬盘打不开了的修复方法?
  16. 报错 Tensorflow 2.0 Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
  17. 苹果双系统怎么切换_电脑双系统如何安装,使用小白一键重装系统
  18. myeclipse2014版本破解出现的问题,过程及解决方案
  19. 困惑很久的解微分方程时绝对值取舍问题(必看)
  20. Java 遍历HashMap并修改(remove)

热门文章

  1. 凌云库存管理系统的几点使用心得
  2. Vue实战开发移动端旅游网站
  3. BUUCTF-Misc-爱因斯坦
  4. 再谈谈贷后分类场景及模型变量解析等内容
  5. 彻底卸载libreoffice
  6. 转载 各种主流音频/视频编码格式介绍
  7. nginx:[emerg]open()“/var/log/nginx/host-8011. acce.log” failed (2:No such file or directory)
  8. SQL中“有且仅有”一种状态的写法
  9. SOLIDWORKS和CATIA两款三维设计软件区别
  10. 分页与分段的主要区别