将屏幕密度放入正确的桶中

2023-12-22

一组六种广义密度:

ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi

从每部手机显示屏的 wiki 页面

缩小到桶中,即如果 ppi 为 300,那么会进入 hdpi 桶,因为它小于 320?

Galaxy S3 306ppi -> bucket hdpi
Nexus 4  318ppi -> bucket hdpi
Nexus 5  445ppi -> bucket xhdpi
Nexus 5X 432ppi -> bucket xhdpi
Nexus 6  493ppi -> bucket xxhdpi 
Nexus 6P 518ppi -> bucket xxhdpi

这是计算屏幕尺寸桶的正确方法吗?

我问的原因是因为我创建了以下值目录资源:

values-hdpi/dimens
values-xhdpi/dimens
values-xxhdpi/dimens
values-xxxhdpi/dimens

In the dimens.xml我有不同的边距,并根据桶大小设置 dp,即

<dimen name="network_quantity_margin_top">100dp</dimen>

我很想知道这是否是正确的方法。


我问的原因是因为我创建了以下值目录资源。 (...) 在 dimens.xml 中,我有不同的边距,并根据存储桶大小设置 dp。 (...) 我很想知道这是否是正确的方法。

我不确定为什么你想要指定不同的边距dp取决于密度。将边距指定为dp对于基线密度,已经为您处理了所有其他密度,这意味着边距的物理尺寸在任何设备上显示时都将是相同的。

如果你用过px代替dp(但不要),那么您就必须自己针对不同的屏幕进行缩放。

缩小到桶中,即如果 ppi 为 300,那么会进入 hdpi 桶,因为它小于 320?

是的,但不是因为它小于 320。如果有经验法则,我会说它四舍五入到最接近的广义密度。请参阅 Android 如何将实际密度大致映射到广义密度的图示(该图并不准确):

相关部分文档 http://developer.android.com/guide/practices/screens_support.html#range这是:

每个广义尺寸和密度都涵盖了一系列实际屏幕尺寸和密度。例如,两个设备的屏幕尺寸均报告为normal手工测量时的实际屏幕尺寸和纵横比可能略有不同。同样,报告屏幕密度为的两台设备hdpi实际像素密度可能略有不同。 Android 将这些差异抽象到应用程序中,因此您可以提供针对通用尺寸和密度设计的 UI,并让系统根据需要处理任何最终调整。

再说一次,你不应该真正关心how如果你只是编写一个应用程序,Android 就会这样做。你应该关心的是:

  • 指定全部布局尺寸 http://developer.android.com/guide/topics/ui/declaring-layout.html#layout-params值在dp或与wrap_content/match_parent,视情况而定(文本可以在sp额外匹配用户偏好,但除了文本之外什么都没有),
  • 考虑不同的布局物理尺寸 http://developer.android.com/guide/topics/resources/providing-resources.html#SmallestScreenWidthQualifier and 方向 http://developer.android.com/guide/topics/resources/providing-resources.html#OrientationQualifier屏幕的
  • 为不同的对象提供位图资源密度 http://developer.android.com/guide/topics/resources/providing-resources.html#DensityQualifier,只是为了避免模糊或像素化伪影(因为如果您使用 Android 会将它们缩放到正确的物理尺寸dp or wrap_content).

安卓会查找最匹配的资源 http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch, and 然后透明处理 http://developer.android.com/guide/practices/screens_support.html#terms的任何缩放dp单位,根据需要,基于使用中屏幕的实际密度。的转换dp屏幕像素的单位很简单:px = dp * (dpi / 160).

注意actual密度相对于广义的密度。后者只是为开发人员提供了便利,因为不可能为每个屏幕提供可绘制对象。这样,开发人员只需提供 3 或 4 组图形,而 Android 会选择最接近的图形,并根据特定设备的需求进一步调整。 (现在可以使用一个矢量绘图而不是许多预先缩放的光栅图形,这意味着更好的质量和更小的尺寸。)

这是计算屏幕尺寸桶的正确方法吗?

不它不是。根据Google 设备指标 https://design.google.com/devices/您列出的所有设备都属于高于您预期的类别:

Galaxy S3    NA        NA
Nexus 4     318     xhdpi
Nexus 5X    424    xxhdpi
Nexus 5     445    xxhdpi
Nexus 6     493   xxxhdpi
Nexus 6P    515   xxxhdpi

我从该列表中取出了一些其他设备,并绘制了不同设备如何根据其实际物理密度落入密度桶中的情况。

Chromebox 30            101      mdpi
Chromebook 11           135      mdpi
Samsung Galaxy Tab 10   149      mdpi
Nexus 7 '12             216     tvdpi
Android One             218      hdpi
Chromebook Pixel        239     xhdpi
Nexus 9                 288     xhdpi
Nexus 10                299     xhdpi
Moto X                  312     xhdpi
Nexus 4                 318     xhdpi
Nexus 7 '13             323     xhdpi 
Moto G                  326     xhdpi
Dell Venue 8            359     xhdpi
LG G2                   424    xxhdpi
Nexus 5X                424    xxhdpi
HTC One M8              441    xxhdpi
Nexus 5                 445    xxhdpi
Nexus 6                 493   xxxhdpi
Nexus 6P                515   xxxhdpi
LG G3                   534    xxhdpi

您可以看到,除了一些值得注意的例外之外,选择最接近的广义密度的规则仍然成立。

Nexus 6 和 6P 除外,它们被列为xxxhdpi,尽管 LG G3 具有更高的物理密度,但距离 640px/in 仍相去甚远。安卓一号是hdpi但它仅比 Nexus 7 '12 稍微密集一点tvdpi。 Chromebox 30 和 Chromebook Pixel(诚然,不是 Android)已分配到存储桶mdpi and xhdpi即使他们的身体素质低于ldpi and hdpi, 分别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将屏幕密度放入正确的桶中 的相关文章

  • 设置文本视图 Android 的文本颜色

    在 string xml 文件中我使用以下标签
  • Android短音的正确播放方法?

    我正在创建一个应用程序 屏幕上将有多个图像 这些图像将是按钮 点击时会播放短促的声音 我对此进行了研究 只能找到我当前用来播放声音的方法 这似乎根本没有响应 我希望声音能够快速播放并且能够响应多次快速点击 我不确定这在 Android 中是
  • Cheesesquare:enterAlways 会产生错误的布局

    Adding enterAlways到 Cheesesquare 演示的滚动标志
  • 如何在android中显示保存在sdcard文件夹中的图像[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 当我正在显
  • 如何在 Linux 内核中定义并触发我自己的新软中断?

    我想在 Linux 内核中创建自己的软中断 这是正确的方法吗 In the init我想触发该模块的softirq我将添加一个调用 394 void open softirq int nr void action struct softir
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 上网本上可以进行Android开发吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用我的上网本进行 Android 开发 但是当我尝试使用 Eclipse 运行 SDK 时 没有加载任何内容 上网本对于 Android 开发来
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • Android - 以编程方式选择菜单选项

    有没有办法以编程方式选择菜单选项 基本上 我希望视图中的按钮能够执行与按特定菜单选项相同的操作 我正在考虑尝试调用 onOptionsItemSelected MenuItem item 但我不知道要为菜单项添加什么 是的 有一种方法可以选
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 通过电子邮件发送文本文件附件

    我正在尝试附加一个文本文件以便通过电子邮件发送 但每当我打开电子邮件应用程序时 它都会说该文件不存在 请帮助 Intent i new Intent Intent ACTION SEND i setType text plain i put
  • 发布的 Android apk 出现错误“包文件未正确签名”

    我最近将我的应用程序上传到 Android 市场 但是由于错误 下载时它拒绝运行 包文件未正确签名 我首先使用 eclipse 发布了数据包 右键单击导出 创建密钥库然后发布 但它拒绝工作 然后我下载了 keytool 和 jarsigne

随机推荐