为什么要屏幕适配

由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,于是导致运行 Android 的设备多种多样,它们有着不同的屏幕尺寸和像素密度。 尽管系统可通过基本的缩放和调整大小功能使界面适应不同屏幕,但您应做出进一步优化,以确保界面能够在各类屏幕上美观地呈现。

碎片化

首先我们要搞清楚,几个比较重要的概念。

屏幕尺寸

屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米

比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等

屏幕分辨率

屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。一般以纵向像素*横向像素,如1960*1080。表示宽度方向上有1080个像素点,在高度方向上有1920个像素点

1.单位:px(pixel),1px=1像素点

2.Android手机常见的分辨率:320x480、480x800、720x1280、1080x1920

3.UI设计师的设计图会以px作为统一的计量单位

屏幕的像素密度

屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。

假设设备内每英寸有160个像素,那么该设备的屏幕像素密度=160dpi。安卓手机对于每类手机屏幕大小都有一个相应的屏幕像素密度。

密度类型

代表的分辨率(px)

屏幕像素密度(dpi)

低密度(ldpi)

240x320

120

中密度(mdpi)

320x480

160

高密度(hdpi)

480x800

240

超高密度(xhdpi)

720x1280

320

超超高密度(xxhdpi)

1080x1920

480

屏幕尺寸、分辨率、像素密度三者关系

一部手机的分辨率是宽x高,屏幕大小是以寸为单位,那么三者的关系是:

关系

密度无关像素

density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关。可以保证在不同屏幕像素密度的设备上显示相同的效果。

1.Android开发时用dp而不是px单位设置图片大小,是Android特有的单位

2.场景:假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位,那么在480x800分辨率手机上设置应为240px;在320x480的手机上应设置为160px,二者设置就不同了;如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。

dp与px的转换

px = dp * (dpi / 160)

密度类型

代表的分辨率(px)

屏幕密度(dpi)

换算(px/dp)

比例

低密度(ldpi)

240x320

120

1dp=0.75px

3

中密度(mdpi)

320x480

160

1dp=1px

4

高密度(hdpi)

480x800

240

1dp=1.5px

6

超高密度(xhdpi)

720x1280

320

1dp=2px

8

超超高密度(xxhdpi)

1080x1920

480

1dp=3px

12

在Android中,规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px

独立比例像素

sp,即scale-independent pixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。

解决方案

使用备用布局 -使用限定符

尺寸(size)限定符

使用最小宽(Smallest-width)度限定符

布局别名

屏幕方向(Orientation)限定符

详情

使用最小宽度限定符

使用“最小宽度”屏幕尺寸限定符,您可以为具有最小宽度(以dp 或 dip 为度量单位)的屏幕提供备用布局。

通过将屏幕尺寸描述为密度无关像素的度量值,Android 允许您创建专为非常具体的屏幕尺寸而设计的布局,同时让您不必对不同的像素密度有任何担心。

例如,您可以创建一个名为 main_activity 且针对手机和平板电脑进行了优化的布局,方法是在目录中创建该文件的不同版本,如下所示:

res/layout/main_activity.xml # For handsets (smaller than 600dp available width)

res/layout-sw600dp/main_activity.xml # For 7” tablets (600dp wide and bigger)

最小宽度限定符指定屏幕两侧的最小尺寸,而不考虑设备当前的屏幕方向,因此这是一种指定布局可用的整体屏幕尺寸的简单方法。

下面是其他最小宽度值与典型屏幕尺寸的对应关系:

320dp:典型手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。

480dp:约为 5 英寸的大手机屏幕 (480x800 mdpi)。

600dp:7 英寸平板电脑 (600x1024 mdpi)。

720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)。

下图提供了一个更详细的视图,说明了不同屏幕 dp 宽度与不同屏幕尺寸和方向的一般对应关系。

对应关系

上图建议的宽度断点以支持不同的屏幕尺寸。

请记住,最小宽度限定符的所有数值都是密度无关像素,因为重要的是系统考虑像素密度(而不是原始像素分辨率)之后可用的屏幕空间量。

注意:您使用这些限定符指定的尺寸不是实际屏幕尺寸,而是 Activity 窗口可用的宽度或高度(以 dp为单位)。Android 系统可能会将部分屏幕用于系统界面(如屏幕底部的系统栏或顶部的状态栏),因此部分屏幕可能不可供您的布局使用。如果您的应用在多窗口模式下使用,则它只能使用该窗口的尺寸。对该窗口进行大小调整时,它会使用新窗口尺寸触发配置更改,以便系统可以选择适当的布局文件。因此,在声明尺寸时,您应具体说明 Activity 需要的尺寸。在声明为布局提供的空间时,系统会考虑系统界面使用的所有空间。

使用可用宽度限定符

您可能希望根据当前可用的宽度或高度来更改布局,而不是根据屏幕的最小宽度来更改布局。例如,如

果您有一个双窗格布局,您可能希望在屏幕宽度至少为 600dp 时使用该布局,但屏幕宽度可能会根据设备的屏幕方向是横向还是纵向而发生变化。在这种情况下,您应使用“可用宽度”限定符,如下所示:

res/layout/main_activity.xml # For handsets (smaller than 600dp available width)

res/layout-w600dp/main_activity.xml # For 7” tablets or any screen with 600dp # available width (possibly landscape handsets)

如果您关心可用高度,则可以使用“可用高度”限定符来执行相同的操作。例如,对于屏幕高度至少为600dp 的屏幕,请使用限定符 layout-h600dp 。

添加屏幕方向限定符

虽然您可能只需将“最小宽度”和“可用宽度”限定符结合使用即可支持所有尺寸变化,但是您可能还希望当用户在纵向与横向之间切换屏幕方向时改变用户体验。

为此,您可以将 port 或 land 限定符添加到资源目录名称中。只需确保这些限定符在其他尺寸限定符后面即可。例如:

res/layout/main_activity.xml # For handsets

res/layout-land/main_activity.xml # For handsets in landscape

res/layout-sw600dp/main_activity.xml # For 7” tablets

res/layout-sw600dp-land/main_activity.xml # For 7” tablets in landscape

使用 Fragment 将界面组件模块化

在针对多种屏幕尺寸设计应用时,您希望确保不会在 Activity 之间不必要地重复界面行为。因此,您应该使用 Fragment 将界面逻辑提取到单独的组件中。然后,您可以组合 Fragment 以便在大屏幕设备上运行时创建多窗格布局,或者在手机上运行时将 Fragment 放置在单独的 Activity 中。

例如,平板电脑上的一款新闻应用可能在左侧显示报道列表,而在右侧显示一篇完整的报道。在左侧选择一篇报道时,会更新右侧的报道视图。但是,在手机上,这两个组件应显示在单独的屏幕上。从列表中选择一篇报道时,会改变整个屏幕以显示这篇报道。

例如,平板电脑上的一款新闻应用可能在左侧显示报道列表,而在右侧显示一篇完整的报道。在左侧选择一篇报道时,会更新右侧的报道视图。但是,在手机上,这两个组件应显示在单独的屏幕上。从列表中选择一篇报道时,会改变整个屏幕以显示这篇报道。

使用旧尺寸限定符支持 Android 3.1

如果您的应用支持 Android 3.1(API 级别 12)或更低版本,则除上面的最小/可用宽度限定符之外,您还需要使用旧尺寸限定符。

在上面的示例中,如果要在较大的设备上显示双窗格布局,那么您需要使用“large”配置限定符来支持3.1 及更低版本。因此,要在这些旧版本上实现此类布局,您可能需要创建以下文件:

res/layout/main_activity.xml # For handsets (smaller than 640dp x 480dp)

res/layout-large/main_activity.xml # For small tablets (640dp x 480dp and bigger)

res/layout-xlarge/main_activity.xml # For large tablets (960dp x 720dp and bigger)

使用布局别名

如果同时支持低于和高于 Android 3.2 的版本,您必须同时对布局使用最小宽度限定符和“large”限定符。因此,您应创建一个名为 res/layout-large/main.xml 的文件,该文件可能与 res/layout- sw600dp/main.xml 完全相同。

为避免同一文件出现这种重复,您可以使用别名文件。例如,您可以定义以下布局:

res/layout/main.xml # single-pane layout

res/layout/main_twopanes.xml # two-pane layout

并添加以下两个文件:

res/values-large/layout.xml

@layout/main_twopanes

res/values-sw600dp/layout.xml

@layout/main_twopanes

这两个文件的内容完全相同,但它们实际上并未定义布局,而只是将 main 设置为 main_twopanes 的别名。由于这些文件具有 large 和 sw600dp 选择器,因此它们适用于任何 Android 版本的平板电脑和电视(低于 3.2 版本的平板电脑和电视与 large 匹配,高于 3.2 版本者将与 sw600dp 匹配)。

android手机分辨率适配,Android屏幕适配(一)相关推荐

  1. 【最新】Android 手机分辨率整理(做屏幕适配的拿走)

    Android 手机分辨率: 320x480    320x400 480x800    480x854 540x960 600x1024 720x1184    720x1196    720x12 ...

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

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

  3. 这篇文章适合所有Android手机第一次买Android手机的可以看看!(ZT)

    这篇文章适合所有Android手机第一次买Android手机的可以看看!(ZT) 18小时前 [b]这篇文章适合所有[/b][b]Android[/b][b]手机[/b][b]第一次买[/b][b]A ...

  4. android大屏适配_Android屏幕适配

    Android屏幕适配 2020-04-20 09:07:33  By: 琛恋柏 随着安卓手机的样式越来越多,屏幕的大小也不一致,分辨率大小也多规格化,所以在开发中就遇到很多关于屏幕适配的问题,当然前 ...

  5. Android高级-网易云音乐屏幕适配

    为什么要进行屏幕适配 屏幕碎片化表现为以下几个方面: 1:屏幕尺寸碎片化: 2:屏幕密度碎片化 3:厂商碎片化:水滴屏,刘海屏 屏幕适配常见方式 二 谷歌推出的百分比布局 手写百分比布局; 为什么百分 ...

  6. Android不同分辨率和不同密度适配

    官方原文地址:http://developer.android.com/training/multiscreen/screendensities.html 本文主要介绍: 1.dip dp sp 简单 ...

  7. 【Android 屏幕适配】屏幕适配基础概念 ① ( Android 与 iOS 屏幕宽高比种类 | 屏幕像素密度 DPI )

    文章目录 一.Android 与 iOS 屏幕宽高比种类 二.屏幕像素密度 参考文档 : 设备兼容性概览 屏幕兼容性概览 支持不同的像素密度 声明受限屏幕支持 一.Android 与 iOS 屏幕宽高 ...

  8. Android一点 打造全功能屏幕适配AutoView

    android适配是繁琐的事,分辨率多样,考虑因素多,并且ui设计图还是px单位的,这时候你就需要AutoView了,AutoView可以帮你做什么呢?写多个dimens文件? 还是需要写很多的代码? ...

  9. android百分比布局适配,安卓屏幕适配-百分比布局

    屏幕适配-百分比布局 原理:以父容器尺寸作为参考,在View的加载过程,根据当前父容器实际尺寸换算出目标尺寸,在作用在View上. 百分比布局实际是对容器的一中扩展,扩展的是宽高等比例的设置. 1.自 ...

最新文章

  1. c语言二十四点游戏,C语言解24点游戏程序
  2. CASS 7.1 和 AutoCAD 2006的安装使用
  3. python所有函数用法_Python函数使用方法(高级用法)
  4. 英特尔开源WebRTC开发套件OWT
  5. 【编译原理】文法分类
  6. C语言餐馆点菜系统设计,order-system 使用c语言设计的餐厅点菜系统 - 下载 - 搜珍网...
  7. 疫情政务问答助手算法冠军开源
  8. python主要用来做什么-Python能用来做什么?以下是Python的三大主要用途
  9. matplotlib-legend 位置属性 loc 使用
  10. pyspark--dataframe使用
  11. 原 Spring RestTemplate中几种常见的请求方式
  12. linux 汽车仪表软件架构,基于嵌入式Linux的汽车全数字仪表界面的设计
  13. 内核操作系统Linux内核变迁杂谈——感知市场的力量
  14. 数学建模中的传染病模型及其编程求解
  15. PX4固定翼姿态控制器详细介绍(一)
  16. 环境搭建—3.0 Linaro gcc
  17. Android 如何查看 SQLite 数据库
  18. 如何判断蓝牙设备类型
  19. 如何提高C语言程序的可读性
  20. 伯通过计算机网络,用于互联的计算机网络的安全系统

热门文章

  1. 分享9个超好用的免费工具/软件/网站(一定有你要的)
  2. leetcode(力扣)刷题题解网站
  3. Unity3D代码动态修改材质球的颜色
  4. 《支付系统-3交易系统》
  5. python------列表的使用
  6. java lstm pb_在Tensorflow Serving上部署基于LSTM的文本分类模型
  7. 电网负荷调度三维组态软件V2.0
  8. 【正点原子Linux连载】第四十四章 设备树下的LED驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  9. 当代计算机的应用,浅析计算机在当今社会中的应用
  10. NginxProxyManager实现unraid反向代理