Android涉及各种各样的支持不同屏幕尺寸和密度的设备。对于应用程序,Android系统通过设备和句柄提供了统一的开发环境,大部分工作是校正每一个应用程序的用户界面到它显示的屏上。...例如,一个240dpi的屏幕,1 dp等于1.5个物理像素。定义应用程序的UI时,你应该总是使用dp单位,以确保在不同密度的屏幕上正确地显示你的UI。...声明支持不同屏幕尺寸也会影响系统如何在较大屏幕上运行应用程序,尤其是,不论应用程序是否运行在屏幕兼容模式。 为了申明应用程序支持的屏幕大小,应该在manifest文件中包含的元素。...虽然这两个设备在尺寸上看上去很接近,但是应用程序的UI的空间是显著不同的,用户交互的风格也是如此。因此,一个7寸和5寸的屏不应该总是使用同一个布局。...例如,一个layout_width为100dp的视图在中等密度的屏幕上是100像素,在高密度屏幕上系统将把它调整到150dp,于是视图在屏幕上占用了大致相同的物理空间。
Q2:为什么有时候,同一个 app,app 内的同个界面,界面上同张图片,但在不同设备上所耗内存却不一样? Q3:图片占用的内存大小公式:图片分辨率 * 每个像素点大小,这种说法正确吗,或者严谨吗?...app,但跑在不同 dpi 设备上,同样的界面,但所耗的内存有可能是不一样的。...那么,为什么在上个小节中,要特别说明,即使同一个 app,但跑在不同 dpi 设备上,同样的界面,但所耗的内存有可能是不一样的。这里为什么要特别用有可能这个词呢? 是吧,大伙想想。...这也就是我在上面讲的,为什么当你使用了开源图片库后,就不能再按照图片内存大小一节中所讲的理论来计算图片占据内存大小的原因。...基于以上理论,以下场景的出现是合理的: 同个 app,在不同 dpi 设备中,同个界面的相同图片所占的内存大小有可能不一样。
本文将告诉你如何让你的应用程序支持各种不同屏幕大小,主要通过以下几种办法: 让你的布局能充分的自适应屏幕 根据屏幕的配置来加载合适的UI布局 确保正确的布局应用在正确的设备屏幕上 提供可以根据屏幕大小自动伸缩的图片...下图展示了这个布局在一个更大的屏幕上显示的结果。 ? 可以注意到,即使屏幕的大小改变,视图之前的相对位置都没有改变。...现在有很多的应用程序为了支持大屏设备,都会实现“two pane”模式(程序会在左侧的面板上展示一个包含子项的List,在右侧面板上展示内容)。...很多应用程序都希望能够更自由地为不同屏幕设备加载不同的布局,不管它们是不是被系统认定为"large"。这就是Android为什么在3.2以后引入了"Smallest-width"限定符。...例如,7寸的平板最小宽度是600dp,所以如果你想让你的UI在这种屏幕上显示two pane,在更小的屏幕上显示single pane,你可以使用sw600dp来表示你想在600dp以上宽度的屏幕上使用
和 "match_parent" 为了确保你的布局能够自适应各种不同屏幕大小,你应该在布局的视图中使用"wrap_content"和"match_parent"来确定它的宽和高。...下图展示了这个布局在一个更大的屏幕上显示的结果。 可以注意到,即使屏幕的大小改变,视图之前的相对位置都没有改变。...现在有很多的应用程序为了支持大屏设备,都会实现“two pane”模式(程序会在左侧的面板上展示一个包含子项的List,在右侧面板上展示内容)。...很多应用程序都希望能够更自由地为不同屏幕设备加载不同的布局,不管它们是不是被系统认定为"large"。这就是Android为什么在3.2以后引入了"Smallest-width"限定符。...例如,7寸的平板最小宽度是600dp,所以如果你想让你的UI在这种屏幕上显示two pane,在更小的屏幕上显示single pane,你可以使用sw600dp来表示你想在600dp以上宽度的屏幕上使用
图1.相同尺寸的设备 不同的分辨率 图上的每一个小格子,其实就代表了一个像素(pixel)。可以看到,一个像素点的大小,在这个三个物理尺寸一样但拥有不同分辨率的设备上,是不一样的。...如果我们以像素为单位来设置一个界面元素的大小,比如说2px的高度,那么这2px的长度上面的设备中就会是下面这个样子: ? 图2.不同分辨率下的2px实际高度 它们真实显示出的长度是不一样的。...举例来说,2dp宽,2dp高的内容,在不同分辨率但屏幕尺寸一样的设备上所显示出的物理大小是一样的。(一个题外话:有些Android开发者建议所有可点击的按钮,宽高都不应该少于48dp。) ?...图3. 2dp * 2dp大小的内容 在同样尺寸的屏幕中所占据的物理大小一致 Android中字体大小使用另外一个单位,叫做scale independent pixels,简称sp。...只需要知道我们之所以要使用一个独立于设备分辨率的单位,主要是为了让应用在不同分辨率的设备中,看起来一致。 在RN中,同样也拥有一个类似于dp的长度单位。
因为我们的色块是 326*326px 大小的,而这台 163PPI 的假 iPhone 7 每英寸上面只有 163 颗像素,为了要展示 326*326px 的色块,它就要多用 1 英寸的屏幕,所以这个色块在屏幕上面看起来就...在定义应用程序的UI时,应该始终使用dp单元,以确保在具有不同密度的屏幕上正确显示UI。 就是说在160dpi的屏幕上,1dip=1px。 ...它跟屏幕密度有关,如果屏幕密度大,1dip代表的px就多,比如在320dpi的屏幕上,1dip=2px。 为什么我们在布局的时候最好要用dip,不要用px? ...比如下面图中的两个手机,同时设置2px长度的Button,在屏幕密度较高的手机里就会显示的比较小。 而同时设置的2dip长度的Button,在两个手机上显示的大小是一样的。...图 5 所以如果你在App布局中都用的px作为单位,那么你的App跑在各个设备上就会出现奇奇怪怪的现象了。
根据 google’s definition,dp 是一种灵活的像素单位,它可以自动按比例显示在任意屏幕上。...在设计 Android 应用的时候,设计师们可以通过使用 dp 在不同像素密度的屏幕上显示同样比例的元素。...首先,在 Android 上,一个关键点是密度无关像素(常被缩写为 DIP 或 DP)的引入,而 iOS 只是使用点作为他们的单位。 这两种类型都能保证你的设计在不同密度大小的设备上能正常使用。...这就是为什么结合品牌效应和平台适应性的混合方法看起来是最佳的选择。显而易见的,Facebook 使用了混合的方法。...从图 3.6 中看,Spotify 对生日和性别信息的文本框设计在两个平台上是不一样的。在 iOS 上使用了传统的下拉菜单设计,而在 Android 上是一个弹出的菜单。
大家好,又见面了,我是你们的朋友全栈君。 由于市场上采用Android系统的设备种类繁多,迫使Andriod开发人员不得不做烦人的适配工作。...适配工作包括对安装不同Android版本的设备进行适配,对不同屏幕的设备进行适配等。...,对于宽度为160 dp的button,在160dpi的设备上占160px, 在320dpi的设备上占160*2=320px,这样在不同设备上看起来相对大小一样,就不会发生button“变小”的情况。...在新建的Android工程中默认的机器人图标,在不同密度目录下大小不一样,其比例和表格上的比例一致,在我们准备资源图片时也要按该比例进行。 后面一行的“倍数”和比例相对应,关于它的作用后面会说明。...将不同目录的图片大小换一下,比如hdpi下图片大小换成72×72,根据结论得出最后计算的图片宽度为 72 * (320/160) / 1.5 = 96 px ,这样ImageView看起来就不会变小了。
单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果 Android开发时用dp而不是px单位设置图片大小,是Android特有的单位 场景:假如同样都是画一条长度是屏幕一半的线,如果使用...“布局控件”匹配 本质:使得布局组件在不同屏幕密度上显示相同的像素效果 做法1:使用密度无关像素 由于各种屏幕的像素密度都有所不同,因此相同数量的像素在不同设备上的实际大小也有所差异,这样使用像素(px...- 单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果 Android开发时用dp而不是px单位设置图片大小,是Android特有的单位 场景:假如同样都是画一条长度是屏幕一半的线,如果使用...,屏幕宽度和像素密度没有任何关联关系 所以说,dp解决了同一数值在不同分辨率中展示相同尺寸大小的问题(即屏幕像素密度匹配问题),但却没有解决设备尺寸大小匹配的问题。...从上面可以看出: 因为屏幕密度(分辨率)不一样,所以不能用固定的px 因为屏幕宽度不一样,所以要小心的用dp 因为本质上是希望使得布局组件在不同屏幕密度上显示相同的像素效果,那么,之前是绕了个弯使用dp
单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果 Android开发时用dp而不是px单位设置图片大小,是Android特有的单位 场景:假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位...答: “布局控件”匹配 本质:使得布局组件在不同屏幕密度上显示相同的像素效果 做法1:使用密度无关像素 由于各种屏幕的像素密度都有所不同,因此相同数量的像素在不同设备上的实际大小也有所差异,这样使用像素...单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果 Android开发时用dp而不是px单位设置图片大小,是Android特有的单位 场景:假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位...长度 再次明确,屏幕宽度和像素密度没有任何关联关系 所以说,dp解决了同一数值在不同分辨率中展示相同尺寸大小的问题(即屏幕像素密度匹配问题),但却没有解决设备尺寸大小匹配的问题。...从上面可以看出: 因为屏幕密度(分辨率)不一样,所以不能用固定的px 因为屏幕宽度不一样,所以要小心的用dp 因为本质上是希望使得布局组件在不同屏幕密度上显示相同的像素效果,那么,之前是绕了个弯使用dp
(Star: 4329); 通过修改Application/Activity等的DisplayMetrics中核心数据,使得在不同分辨率手机上对应的dp相等而达到每个显示的View占用屏幕的比例相同。.../160) = 360 dp 可以看到屏幕的总 dp 宽度在不同的设备上是会变化的,但是我们在布局中填写的 dp 值却是固定不变的,这就导致我们设置的固定宽度在不同的设备上显示的比例不一样。...这时我们要想完美适配,那就必须保证这个 View 在任何分辨率的屏幕上,与屏幕的比例都是相同的。 要做到在任何分辨率的屏幕上显示比例相同,我们该怎么做呢?...方案一: 动态改变每个View的dp值 由于每种设备的宽度dp值是不同的,为使得View能够在不同设备上显示的比例一致,可以通过代码计算动态的设置每个View的dp值,这种方式显然是不合适的,工作量太大...计算出的结果(上面模拟器参数是我特意设置,为了很明显的演示所需) , 因此在大多数设备上对View的宽/高设以dp为单位进行设置值,差别并不是十分大,当然这只是大多数设备,因此要适配每种设备还是很难做到的
屏幕尺寸、分辨率、像素密度之间的换算图 (5)密度无关像素(dp 或 dip) 单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果 Android开发设置布局和控件宽高,用dp而不是px...下面给一个实例说明,让你更能明白这几个单位: 看下图你可以知道:为什么使用了dp作为单位,两个手机分辨率也是一样的,可是按钮显示的宽度还是不一样? ?...图片资源适配 使得图片资源在不同屏幕密度上显示相同的像素效果。 在实际开发中一个按钮的背景图片必须能够随着按钮大小的改变而改变。...dp解决了同一数值在 不同分辨率 中展示 相同尺寸大小 的问题(即屏幕像素密度匹配问题),但却没有解决设备 尺寸大小匹配 的问题。(即屏幕尺寸匹配问题)。...因为本质上是希望使得布局组件在不同屏幕密度上显示相同的像素效果,那么,之前是绕了个弯使用dp解决这个问题,那么到底能不能直接用px解决呢?当然是可以的。根据不同屏幕密度,控件选择对应的像素值大小。
动态海拔高度偏移:指的是从静止状态向目标海拔移动的距离(translationZ) 组件的海拔高度: 同一组件在不同的应用中,海拔高度是相同的,比如:不同应用中的浮动操作按钮的海拔是相同的 同一组件在不同的平台和设备中...轮廓 默认情况下,所有的view都是矩形的,虽然可以给view设置背景圆形的图片,即可以在界面显示出圆形的内容,但是view的大小实际上依然是矩形,并且设置的图片实际上也是矩形的,只是圆形以外的区域是透明色...如果根据view大小来生成对应的阴影,就会出现很奇怪的效果,(一个看起来圆形的view展示出的确实一个矩形的阴影)为了解决这个问题,view增加了一个新的描述来指明内容显示的形状,这就是轮廓。...阴影的产生是不同海拔高度的材料相互叠加产生的,在 Material Design 中,虚拟的光线照射使我的物质材料出现阴影,这里的光有两种光,一种是关键灯,一种是环境灯。...在Web上,仅通过操纵y轴即可描绘阴影。以下示例显示了海拔为6dp的卡片。 阴影的条件 阴影由轮廓和海拔共同决定。 海拔决定了阴影的大小,轮廓决定了阴影的形状。
在解决这些问题的过程中,我们往往会遇到非常多的概念:像素、分辨率、 PPI、 DPI、 DP、 DIP、 DPR、视口等等,你真的能分清这些概念的意义吗?...理论上来讲,在白色手机上相同大小的图片和文字,在黑色手机上会被缩放一倍,因为它的分辨率提高了一倍。这样,岂不是后面出现更高分辨率的手机,页面元素会变得越来越小吗? ?...我们必须用一种单位来同时告诉不同分辨率的手机,它们在界面上显示元素的大小是多少,这个单位就是设备独立像素( DeviceIndependentPixels)简称 DIP或 DP。...而在设备像素比大于 1的屏幕上,我们写的 1px实际上是被多个物理像素渲染,这就会出现 1px在有些屏幕上看起来很粗的现象。...六、移动端适配方案 尽管我们可以使用设备独立像素来保证各个设备在不同手机上显示的效果类似,但这并不能保证它们显示完全一致,我们需要一种方案来让设计稿得到更完美的适配。
使用Tinker有几点需要注意: TinkerId非常重要,最好在App内某个地方显示出来; Manifest.xml最好不要去改动,虽然某些改动生成的补丁包可以合成,但不是在所有设备上都能成功; Tinker...文字适配 挑一台最具代表性的大众设备,以sp为单位适配好它就好。相同sp在不同设备,其物理大小是不一样的。...Google这样设计的好处是手机App可以直接适配电视。(想要验证上方论述很简单:在xml中画一个200dp*200dp的黑框,然后用不同设备预览)。...如果真的是强迫每个设备上显示物理大小需要一致,那么直接用inch就行(少部分鸡贼厂商是没有给出准确inch的),也别用什么dp了(搬倒砖)。...编译版本的话,新项目可以上Android X,我已经用了半年了,没啥问题。 尾巴 惯例,留个尾巴。聊得比较休闲,没打草稿,更多是一些个人偏好,如有技术上的错误,还请指正。
像素(PX) 代表屏幕上一个物理的像素点代表屏幕上一个物理的像素点。 屏幕密度 为解决Android设备碎片化,引入一个概念DP,也就是密度。指在一定尺寸的物理屏幕上显示像素的数量,通常指分辨率。...尽管概念不同,但是对于移动设备的显示屏,可以看作ppi=dpi 。...简单理解的话,px(像素)是我们UI设计师在PS里使用的,同时也是手机屏幕上所显示的,dp是开发写layout的时候使用的尺寸单位。 为什么要把sp和dp代替px?...原因是他们不会因为ppi的变化而变化,在相同物理尺寸和不同ppi下,他们呈现的高度大小是相同。也就是说更接近物理呈现,而px则不行。...手机上看来同一大小的字磅值是一样的,但是换算成不同分辨率手机的字号px值不一样。
当屏幕宽度为460dp或更小时,按钮的大小应该从默认的(56dp)变为最小尺寸(40dp)。 ?...---- 行为(此部分见原网站) 默认情况下,悬浮响应式按钮在屏幕上以动画形式展开。 其中的icon可能是动态的。 由于其相对而言的重要性,悬浮响应式按钮的移动方式可能与其他UI元素不同。 ?...如果按钮在各个屏幕上的动作保持不变(如有必要,则转换为新位置),该按钮应保持在屏幕上。 列表 悬浮响应式按钮下面的列表应该在它们下面有足够的空间,以便它们的内容不被按钮挡住。...带标签的屏幕 在带标签的屏幕上,悬浮响应式按钮不应以与内容相同的方向退出屏幕。...该列表不应包含无关的操作。 ? 变形 浮动操作按钮可以转换为属于应用程序结构的一部分材料。 这种戏剧性的变化突出了按钮所能实现的动作。 悬浮响应式按钮变形时,以有逻辑的方式在开始和结束位置之间转换。
android支持如下像素单位:px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小),其中常用的就是px、dp和...个人理解,px是android屏幕上可显示的最小单位,这个与物理设备的显示屏有关系,一般来说,同样尺寸的屏幕(比如说都是4.7寸的手机),看起来越清晰的屏幕,其像素密度越高,以px计量的分辨率就越大。...至于sp,其原理跟dp差不多,那为什么说sp专门用于设置字体大小呢?...android手机在系统设置里面可以设置字体的大小(小、普通、大、超大),设置普通字体时,同数值dp和sp的文字看起来是一样大的,但如果设置为大字体,用dp设置大小的文字没有变化,而用sp设置大小的文字就变大了...dp和px的使用场景 xml布局文件中,因为设备无关性,所以除了sp用于设置文字大小外,其余要用大小的地方都是写dp。但在代码之中,情况又不同,android用于设置大小的函数都是以px为单位。
领取专属 10元无门槛券
手把手带您无忧上云