使用 dpi 与 dp 缩放图像之间的差异

2024-05-18

我拥有所有由九个补丁位图组成的 dpi 可绘制目录(xxhdpi 和 xxxhdpi 是否必要?),可绘制目录中的可绘制资源文件可检索所有缩放的位图,并且我使用可绘制资源文件...现在,我的问题是我还根据大小(小、正常等)创建了“缩放”布局目录,其中我尝试手动更改按钮的 dp,如下所示:

这是我的 xhdpi 位图:

...但在 Nexus 7 虚拟模拟器(7.0", 1200X1920: xhdpi)上的layout-large 目录中看起来像这样:

...当我手动将其中一个按钮的 dp 大小更改为 200 时:

^^^ 顺便问一下,我的目录看起来怎么样? ...为什么按钮会出现这样的情况? ^^^

综上所述,我只是不明白为什么我们需要基于密度的可绘制目录(mdpi、hdpi、xhdpi 等)布局资源目录,当我们可以根据屏幕尺寸(小、正常等)简单地修改每个独特布局中图像的 dp 时。


@dpark14 我基本上已经回答了您在昨天的帖子中提出的问题:是否针对各种屏幕尺寸建议修改 dp 大小而不是像素? https://stackoverflow.com/questions/36046531/is-modifying-the-dp-size-as-opposed-to-pixels-recommended-for-various-screen-siz/36050317

  1. 也许您应该编辑最后一个问题以包含上面的代码和图像,以便可以对其进行合并。
  2. 正如我在回答中所说(以及其他评论之一):

如果您想更改 imageButton 的布局宽度和高度(以 dp 为单位),这完全取决于您。在不同屏幕的每个独特的布局资源文件中设置 imageButton 或任何 UI 元素的宽度和高度当然没有任何问题。您是否有想要获得反馈的特定代码?

现在您已经包含了一些图像,我可以看到您拥有的一些内容。

你真的应该看看这个:Android Studio 可绘制文件夹 https://stackoverflow.com/questions/28784593/android-studio-drawable-folders

再次阅读 Android 文档会对您有所帮助:http://developer.android.com/guide/practices/screens_support.html http://developer.android.com/guide/practices/screens_support.html

总结几个总体思路: 你不需要一个default可绘制文件夹,但您应该具有以下内容:

  • 可绘制-mdpi(中)~160dpi
  • 可绘制-hdpi(高)~240dpi
  • 可绘制-xhdpi(超高)~320dpi
  • 可绘制-xxhdpi(超超高)~480dpi
  • 可绘制-xxxhdpi(超超超高)~640dpi

正如 Android 文档在上面的链接中所说:

当您的应用程序在不同密度的屏幕上显示时保留用户界面元素的物理尺寸(从用户的角度来看),即可实现“密度独立性”。

代替:

如果由于某种原因(看起来您遇到了问题)您已经实现了密度独立性,但您的图像不太适合,那么您可以开始介入更改 w/h 和 res/布局

也来自我之前的回答:

正如您提到的:您可以根据“最小值”为各种设备创建不同的 res/dimens 目录,例如w800dp/dimens.xml,然后在该特定的 dimens.xml 中创建元素,例如value-w411/dimens.xml 的宽度和高度与测试应用程序时不太适合的图像相对应。

作为第一步,也许您应该尝试一下。是的,这需要时间,但首先尝试与您的应用程序分开的独立测试。只需添加一张图像(可能是您遇到问题的图像)。看看当您将其加载到模拟器中的不同 Nexus 设备时会发生什么。图像是否实现了“密度无关性”,即跨设备保留物理尺寸?如果确实如此,并且其 w/h 与特定设备的限制有关,正如我在之前的回答中所说的,现在在这里,专门为问题设备创建一个dimens目录(在values-...目录中),并更改该特定图像或视图的layout_width/layout_height。

有关特定设备的更多信息:https://design.google.com/devices/ https://design.google.com/devices/

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

使用 dpi 与 dp 缩放图像之间的差异 的相关文章

随机推荐

  • bigquery DataFlow 错误:在 EU 中读写时无法在不同位置读写

    我有一个简单的 Google DataFlow 任务 它从 BigQuery 表中读取数据并写入另一个表 如下所示 p beam io Read beam io BigQuerySource query select dia import
  • dplyr 返回每个组的全局平均值,而不是每个组的平均值

    有人可以解释一下我在这里做错了什么 library dplyr temp lt data frame a c 1 2 3 1 2 3 1 2 3 b c 1 2 3 1 2 3 1 2 3 temp gt group by temp 1 g
  • 检查外部 JS 库是否已加载[重复]

    这个问题在这里已经有答案了 我当前的设置是用户单击链接来动态加载内容 其中还包括加载脚本 我希望能够测试是否加载了外部脚本 特别是 Google Maps JS API 如果没有加载 则继续执行此操作 这是我的代码 if href cont
  • 您在 Java 项目中使用什么策略进行包命名?为什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我不久前就想过这个问题 最近当我的商店正在开发第一个真正的 Java Web 应用程序时 这个问题又重新出现了 作为介绍 我看到两个主要的包命名
  • 减少从 MongoDB 加载大熊猫数据帧所使用的内存

    我有一个大型数据集 包含 4000 万条记录 总大小约为 21 0G 存储在 MongoDB 中 我花了几个小时将其加载到 pandas 数据框中 但总内存大小增加到约 28 7G 加载之前约为 600Mb cursor mongocoll
  • 范围为“provided”的工件的 Maven 依赖关系树行为

    我偶然发现同一项目在两台电脑上的不同行为 在两台机器上我运行命令mvn dependency tree X但收到不同的结果 在我收到的第一台机器上 Apache Maven 3 2 2 45f7c06d68e745d05611f7fd14e
  • 选择多列 按一列分组 按计数排序

    我在Oracle中有以下数据集 c1 c2 c3 1A2 cat black 1G2 dog red B11 frog green 1G2 girl red 试图得到以下结果 基本上我首先尝试获取具有重复 c1 的行 c1 c2 c3 1G
  • Angular - 如何解析 event.path 内的对象

    现在这是一个很难解释的复杂问题 我会尽力解释 我有一个弹出窗口 我想从中唯一地标识单击事件是来自弹出窗口内部还是外部 我的第一个方法 我用一个包住了整个弹出框div与id 说 独特 因此 我将单击事件与主机侦听器绑定 我将为其获取事件对象
  • 如何在 ADB 连接期间禁用电池充电?

    问题描述 每次我在电脑和手机之间连接 USB 线时 电池都会自动充电 我想使用 ADB 协议 但我不想在 ADB 连接期间为电池充电 是否可以关闭此充电功能 当然 我该怎么做呢 环境 Android 操作系统 4 及更高版本的手机 我只需要
  • 如何像函数一样使用 google.script.run

    在 Google Apps 脚本中 我有以下脚本 function doGet return HtmlService createHtmlOutputFromFile mypage function writeSomething retur
  • ng-submit 不允许自定义绑定提交事件

    我有一个指令 我想用它在提交表单时广播事件 我正在做的项目有很多表单 因此无法在ng submit调用的函数中广播事件 指示 directive form function return restrict E link function s
  • SFINAE 中使用的别名模板导致硬错误

    我想使用启用程序 别名模板enable if 在一个类模板中定义 在另一个类模板中定义 它看起来像这样 template lt gt using enabler typename std enable if lt gt type 这对于 S
  • 如果没有定义命名空间,类将拥有什么命名空间

    在 C 中 如果我创建一个没有命名空间的类 那么在尝试实例化该类时将使用哪个命名空间 例如 假设 main 是 namespace NamespaceTests class Program static void Main string a
  • 删除圆形图像周围的边框

    我有一个圆形图像 png 文件 中间是透明的 我需要将图像内的背景设置为纯色 为此 我将背景设为纯色 然后将border radius 50 但这会产生一条丑陋的小白线 有没有办法摆脱这个问题 或者我必须在图像编辑器中手动为图像着色 div
  • 检测 AVAudioPlayer 中的播放结束

    我有几个短的 mp3 声音 我将它们存储在数组中 并希望连续播放它们 有什么方法可以检测 AVAudioPlayer 何时停止播放 以便我可以调用完成处理程序并播放下一个声音 我知道有一个委托 但我正在使用 Playground 和 SKS
  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 使用 dpi 与 dp 缩放图像之间的差异

    我拥有所有由九个补丁位图组成的 dpi 可绘制目录 xxhdpi 和 xxxhdpi 是否必要 可绘制目录中的可绘制资源文件可检索所有缩放的位图 并且我使用可绘制资源文件 现在 我的问题是我还根据大小 小 正常等 创建了 缩放 布局目录 其