二、基本概念
1、像素(px):
含义:一般来说,一个像素是CCD/CMOS上光电探测元件的数量,光电探测元件经过曝光、光电信号转换、A/D转换等过程后,在输出照片上形成点。做。如果将图像放大几次,您会发现这些连续的色调实际上是由许多颜色相似的小方点组成的。这些小方形点是构成图像的最小像素单位。简而言之,像素是手机屏幕的最小组成部分。单位:px(像素),1px=1 像素。 UI 设计师通常在其蓝图中使用px 作为统一的测量单位。
2、分辨率:
含义:手机的水平和垂直总像素通常表示为宽度* 高度,或水平像素* 垂直像素(例如1080 x 1920)。单位:px(像素),1px=1像素
3、屏幕尺寸(in):
含义:手机的对角线物理尺寸以英寸为单位测量,其中1 英寸约为2.54 厘米。常见尺寸有4.7英寸、5英寸、5.5英寸和6英寸。
4、屏幕像素密度(dpi):
含义:每英寸像素数。 例如,如果每英寸有160 个像素,则像素密度为160dpi。单位:dpi(每英寸点数) 公式:像素密度=像素数/尺寸(dpi=px/in) 标准屏幕像素密度(mdpi):每英寸长度(160dpi)有160个像素,称为标准屏幕像素密度(。 mdpi)。
密度类型包括: 分辨率(px) 屏幕像素密度(dpi) 低密度(ldpi) 240 x 320120 中密度(mdpi) 320 x 480160 高密度(hdpi) 480 x 800240 超高密度(xhdpi) 720 x 1280 超过320高密度(xxhdpi) 1080 x 1920480
屏幕尺寸、分辨率、像素密度三者关系
手机的分辨率为宽x高,屏幕尺寸为英寸。那么这三者之间的关系就变成了:
假设您的手机分辨率为1080×1920 (px),屏幕尺寸为5 英寸。
5、密度无关像素(dp):
含义:与密度无关的像素(称为dp 或div)与设备上的实际物理像素无关。单位:dp可以保证在不同屏幕像素密度的设备上获得相同的效果。安卓。示例场景:如果要绘制一条屏幕长度一半的线并使用像素作为测量单位,则在480×800 分辨率的手机上应设置为240 像素,在320×480 分辨率的手机上应设置为160 像素。使用dp 作为单位,160 dp 在两种分辨率下都显示为屏幕长度的一半。 dp 和px 之间的转换:1dp=(dpi/160) * 1px;
以密度类型表示的分辨率(px) 屏幕密度(dpi) 转换低密度(LDPI) 240 x 3201201dp=0.75px 中密度(MDPI) 320 x 4801601dp=1px 高密度(HDPI) 480 x 8002401dp=大于1.5px 高密度(xhdpi) 720 x 12803201dp=2px 超高密度(xxhdpi) 1080 x 19204801dp=3px
6、独立比例像素(sp):
含义:与比例无关的像素,称为sp 或sip。单位:sp,字体大小的特殊单位。这可以根据您的字体大小设置进行缩放。18sp 和22sp 是推荐的字体大小。不建议使用奇数或小数,因为它们往往会失去精度。另外,小于12sp 的字体也太小了。
7、sp 与 dp 的区别:
dp仅与屏幕的像素密度有关。 sp 和dp 非常相似,唯一的区别是Android 系统允许用户自定义文本大小(小、正常、大、特大等)。文本大小为“标准”1sp=1dp=0.00625 英寸,如果文本大小较大或特大,则1sp1dp=0.00625 英寸。类似于Windows ——中调整字体大小后的效果,窗口大小没有变化,只有文字大小变化。
我追踪Android源代码,发现系统使用applyDimension()(路径:android.util.TypedValue.applyDimension())将所有单位转换为px,然后执行以下操作:我做到了。
/**
将解包的复数数据值转换为保留维度的最终浮点值。单位和值这两个参数看起来像{@link #TYPE_DIMENSION}。 @param Unit 要转换的单位。 @param value 要应用单位的值。 @parammetrics 用于转换的当前显示指标- 提供显示密度和缩放信息。
@return 将复数浮点值乘以适当的度量(取决于其单位)。
*/
公共静态浮点applyDimension(int 单位,浮点值,
显示指标)
{
开关(单位){
案例COMPLEX_UNIT_PX:
返回值;
案例COMPLEX_UNIT_DIP:
返回值*metrics.密度;
案例COMPLEX_UNIT_SP:
返回值*metrics.scaledDensity;
案例COMPLEX_UNIT_PT:
返回值*metrics.xdpi*(1.0f/72);
案例COMPLEX_UNIT_IN:
返回值*metrics.xdpi;
案例COMPLEX_UNIT_MM:
返回值*metrics.xdpi*(1.0f/25.4f);
}
返回0。
}
可以看到dp和sp之间的区别在于两个值:密度和scaledDensity。
/**
显示的逻辑密度。这是一个与密度无关的像素缩放因子。一个DIP 是大约160 dpi 的屏幕(例如,240×320、1.5 英尺x 2 英尺的屏幕)上的一个像素,并为系统显示提供基线。因此,对于160 dpi 屏幕,该密度值为1,对于120 dpi 屏幕,该密度值为0.75。该值并不完全符合实际屏幕尺寸(如下所示)。
{@link #xdpi} 和{@link #ydpi} 用于根据显示dpi 的整体变化逐步缩放整体UI 尺寸。例如,240×320 屏幕的密度为1。宽度为1.8 英尺、1.3 英尺等。但是,如果屏幕分辨率增加到320×480,但屏幕尺寸仍为1.5 英尺x 2 英尺,则密度将会增加(可能会增加到1.5)。请参阅@#DENSITY_DEFAULT。
*/
公众持股量密度。
/**
显示屏上显示的字体的放大倍数。这与{@link #密度} 相同,只是它可以在运行时根据用户偏好的字体大小以较小的增量进行调整。
*/
公众持股规模密度;
三、适配方案
屏幕适配问题的本质是保证布局和布局组件在不同尺寸和分辨率的Android智能手机上具有相同的显示效果。下面我们从几个方面来讨论如何适应。
3.1 关于布局组件的适配:
3.1.1 使用与密度无关的像素指定尺寸
使用像素(px) 定义布局尺寸可能会出现问题,因为不同的屏幕具有不同的像素密度,因此即使相同数量的像素在每个设备上也有不同的实际尺寸。 因此,始终使用与密度无关的像素dp 或与比例无关的像素sp 单位指定尺寸。
注意: 制造商在制造过程中并未完全遵守屏幕密度标准,可能会与Google 的屏幕密度标准有所不同或显着偏离。此外,理论计算(平方根)会引入误差。事实上,以dp为单位并不能完全完成适配操作。
3.1.2 使用相对或线性布局,避免绝对布局。
您的选择包括Linearlayout、RelativeLayout、FrameLayout、AbsoluteLayout 和新的CoordinatorLayout,具体取决于您的需要。没有绝对的事情。
然而RelativeLayout关注的是相对位置,因此即使屏幕尺寸改变,视图的相对位置也不会改变。 LinearLayout 方法提供对定位的精确控制。由于子视图只能简单地平铺,所以更好的解决方案是使用RelativeLayout来使其适应屏幕。绝对布局很少使用,因为它们非常不灵活。
3.1.3 使用wrap_content、match_parent、weight
如果使用\’wrap_content\’ 和\’match_parent\’ 大小值而不是硬编码大小,系统将自动计算相应的值,并且视图将使用所需空间或可用空间相应地填充空格。并调整布局。正确适应不同的屏幕尺寸。屏幕方向和组件重量比也是如此。
3.1.4 使用minWidth、minHeight、lines等属性
显示的数据通常是从后台返回并根据组件进行处理。无法确定该数据的长度。一般情况下,我们考虑的布局只是最合适的。在考虑布局时添加组件最小宽度、高度、行数等属性的设置,如界面对齐、完整数据显示等,避免特殊情况下破坏整个结构。数据布局。
3.1.5 使用尺寸
尺寸允许您定义组件的长度和宽度。另外,翻译后的长度一般与中文不匹配,因此可以针对不同的屏幕尺寸定义不同的值。您还可以为每种语言表示定义不同的值。
3.2 关于布局的适配:
虽然上述方法可以解决屏幕适配问题,但是使用拉伸控件来适应不同屏幕尺寸的布局不一定能够提供最佳的用户体验。除了实现自适应布局之外,您的应用程序还必须提供某种方法来根据屏幕配置加载不同的布局。这可以通过配置修改器来实现。配置修饰符允许程序在运行时根据当前设备配置(例如,为不同的屏幕尺寸设计不同的布局)自动加载适当的资源。
3.2.1 使用尺寸修饰符
许多应用程序在大屏幕上实现“双面板”模式,在一个面板中显示项目列表,在另一个面板中显示相应的内容。平板电脑和电视屏幕已经足够大,可以容纳两个面板,但手机屏幕需要单独查看。因此,您可以使用以下文件来实现这些布局:
1446102583971944.jpg
1446102728277991.jpg
请注意第二个布局名称目录中的大限定符。在屏幕较大的设备上选择此布局,例如7 英寸或更大的平板电脑。对于较小的屏幕,选择不同的布局(无修饰符)。
3.2.2 最小宽度修改器
使用Size修饰符有一个让很多程序员头疼的问题。大究竟意味着什么?许多应用程序希望能够更自由地在不同的屏幕设备上加载不同的布局,无论系统是否认为它们“大”。这就是我们从Android 3.2 开始引入“最小宽度”修饰符的原因。
最小宽度修饰符允许dp 以特定的最小宽度定位屏幕。例如,标准7 英寸平板电脑的最小宽度为600 dp,因此如果您想在此类屏幕上的UI 中使用双面板(但仅在较小的屏幕上显示列表),请使用上面的可以。既是单面板布局,也是双面板布局,但不应使用大尺寸修饰符,而应使用sw600dp 来指示双面板布局仅适用于最小宽度为600 dp 的屏幕。
1446102760481409.jpg
1446102807853454.jpg
也就是说,对于最小宽度为600 dp 或以上的设备,系统选择layout-sw600dp/main.xml(双面板)布局。否则,系统选择layout/main.xml(单个面板)。布局。
但是,Android 3.2 版本之前的设备不支持此技术。这些设备无法将sw600dp 识别为尺寸修饰符,因此您仍必须使用Large 修饰符。结果是一个名为res/layout-large/main.xml 的文件(与res/layout-sw600dp/main.xml 相同)。但这并不重要。您将很快了解如何避免像这样重复布局文件。
3.2.3 使用布局别名
最小宽度修饰符仅适用于Android 3.2 及更高版本。因此,如果您需要使用与较低版本兼容的常见尺寸范围(小、标准、大、特大),例如,手机显示一个面板、7英寸平板电脑、电视,如果您设计用户在其他大型设备上显示多个面板的接口,必须提供以下文件:
res/layout/main.xml: 单面板布局res/layout-large: 多面板布局res/layout-sw600dp: 多面板布局
后两个文件是相同的。一种适用于Android 3.2 设备,另一种适用于使用旧版本Android 的平板电脑和电视。
为了避免平板电脑和电视的文件重复(以及由此产生的维护问题),您可以使用别名文件。例如,您可以定义以下布局:
res/layout/main.xml,单面板布局
res/layout/main_twopanes.xml,两个面板布局
接下来,添加以下两个文件:
资源/值-大/layout.xml:
![QQ截图20151029151423.jpg](https://user-gold-cdn.xitu.io/2018/4/27/1630762b8eba4d72?imageView2/0/w/128
0/h/960/忽略错误/1)
1446102885594589.jpg
资源/值-sw600dp/layout.xml:
1446102894526452.jpg
后两个文件的内容是相同的,但它们实际上并没有定义布局。只需将main 设置为main_twopanes 的别名即可。这些文件包含large和sw600dp选择器,因此它们适用于平板电脑和电视,无论Android版本如何(3.2之前版本的平板电脑和电视匹配Large,3.2以上版本的平板电脑和电视匹配sw600dp)。
3.2.4 使用屏幕方向修饰符
某些布局同时支持横向和纵向模式,但大多数布局都可以调整以更好地工作。在新闻阅读器示例应用程序中,每个屏幕尺寸和方向的布局行为如下:
小屏幕,纵向:一个带有徽标的面板
小屏幕,横向:一个带有徽标的面板
7 英寸平板电脑,纵向:带操作栏的单面板
7 英寸平板电脑,横向:双面板,宽,带操作栏
10 英寸平板电脑,纵向:双面板,窄型,带操作栏
10 英寸平板电脑,横向:双面板,宽,带操作栏
电视,横向:双面板,宽,带操作栏
因此,每个布局都在res/layout/目录中的XML 文件中定义。为了继续将每个布局分配给不同的屏幕配置,应用程序使用布局别名来匹配两者。
res/layout/onepane.xml:(单面板)
1446102945879746.jpg
res/layout/onepane_with_bar.xml:(带操作栏的单面板)
1446102982969502.jpg
res/layout/twopanes.xml:(双面板,宽布局)
1446103034115365.jpg
res/layout/twopanes_narrow.xml:(双面板,窄布局)
1446103047709192.jpg
现在我们已经定义了所有可能的布局,我们需要做的就是使用配置修饰符将正确的布局映射到不同的配置。
现在只需使用布局别名技术即可轻松实现这一点。
资源/值/layouts.xml:
1446103188926681.jpg
资源/值-sw600dp-land/layouts.xml:
1446103198972935.jpg
res/values-sw600dp-port/layouts.xml:
1446103206749499.jpg
res/values-large-land/layouts.xml:
1446103214277258.jpg
res/values-large-port/layouts.xml:
1446103221453853.jpg
3.2.5 适配多种布局
res/values/layouts.xml: res/values-sw600dp-land/layouts.xml: res/values-sw600dp-port/layouts.xml: res/values-large-land/layouts.xml: res/values-large-port/layouts。 xml:
3.3 关于图片的适配:
3.3.1 标志图标
我们建议每个图标都按照官方标准创建。
屏幕密度对应的图像资源目录: 120dip36px * 36pxmipmap-ldpi160dip (baseline) 48px * 48pxmipmap 或mipmap-mdpi240dip (1.5x) 72px * 72pxmipmap-hdpi320dip (2x) 96px * 96pxmipmap-xhdpi480 dial (3x) * 1 44pxmipmap-xxhdpi640dip(4x )192px * 192pxmipmap-xxxhdpi
3.3.2 常用图像和图标
我们建议安装官方密度类型进行切割,但通常只需要xxhdpi 或xxxhdpi 切割即可满足您的需求。
3.3.3 位图自动拉伸:9种补丁图像类型
支持不同的屏幕尺寸通常意味着图像资源也需要自适应。例如,当按钮大小改变时,按钮的背景图像也应该能够改变。 如果你想使用常规图像来实现上述功能,你会发现很难实现,因为运行时会均匀拉伸图像。解决方案是使用9 块图像。这是经过特殊处理的PNG 图像,允许您指定哪些区域可以拉伸,哪些区域不能拉伸。
3.3.4 动画、自定义视图和形状
您可以使用代码来控制和显示多个视图,包括执行补丁动画而不是帧动画。
最后
多年来,编辑了解到,大多数入门级和中级Android工程师想要提高自己,往往必须自己探索和成长,这是不系统的、短暂的,我了解到这并没有帮助。
因此,我们收集整理了《2024年Android移动开发全套学习资料》册。最初的目的也很简单。换句话说,我们想帮助那些想学习、提高自己,但不知道从哪里开始的朋友。
由于文件较多,这里仅展示部分目录截图。这套完整的内容包括对领先制造商的采访、学习笔记、源代码讲义、实践项目、概述路线、电子书和教学视频。它将继续更新。
一个人可以走得快,但一群人可以走得更远。无论是IT行业的资深人士还是对IT行业感兴趣的新人。
欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!
如果您需要此信息,请从第 栏中获取。
nm-1719168201914)]
[外部链接图像正在传输.(img-UTQBsf7t-1719168201914)]
[正在传输外部链接图像.(img-W2Mkx7Wz-1719168201915)]
[外部链接图像正在传输.(img-wKLmlk81-1719168201915)]
由于文件较多,这里仅展示部分目录截图。这套完整的内容包括对领先制造商的采访、学习笔记、源代码讲义、实践项目、概述路线、电子书和教学视频。它将继续更新。
一个人可以走得快,但一群人可以走得更远。无论是IT行业的资深人士还是对IT行业感兴趣的新人。
欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!
如果您需要此信息,请从第 栏中获取。
以上关于#Android屏幕适配方案的相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91871.html