我们是否需要将所有具有不同 dpi 的图像添加到 Android 应用程序中

2023-12-04

如您所知,Android 应用程序具有不同的 DPI,并且在 Android 应用程序中我们可以添加drawable不同 DPI 的情况ldpi, mdpi, hdpi and xhdpi文件夹。

问题是,当我们想要支持所有 DPI 时,我们应该添加所有不同尺寸的图标还是只添加最大的图标?

我的意思是,例如假设我有一个带有图标的操作栏项目。我是否应该添加此操作栏项目的图标24x24(在drawable-mdpi文件夹中),36x36(在drawble-hdpi文件夹中),48x48(在drawable-xhdpi文件夹中),.....

或者我只需要添加一个大小为 96x96 的图标xxxhdpi文件夹和android会为其他DPI设置高质量的图标吗?


TLDR 请参阅下面的粗体部分

后来为 Android 添加了不同密度的文件夹,这意味着......

如果您想偷懒,只添加一项资产,那么最好的选择可能是HDPI资产如果你的最小应用目标 and XHDPI if its >= 8。这是因为系统会上下缩放资源,但您仍然希望以尽可能最高分辨率开始。

如果您想完全控制资产的扩展方式,那么您可以通过各种方式为所有/部分密度提供您自己的资产。在实践中,我通常提供如上所述的 HDPI / XHDPI,并提供徽标 / AB 图标 / 应用程序图标等的所有资源桶。我通常发现自动缩放非常好并且适用于大多数情况,但有时必须提供如果它是一个小资产/包含小文本等,则需要额外的 LD/MD 资产。另外,如果我复制 XXXHDPI 之类的所有资产,我会得到相当好的 apk 膨胀。

您还可以使用 IDE 内置工具一次为多种密度添加单个资产。在 Android Studio 0.6 中,这是“文件”->“新建”->“图像资源”,然后会出现一个向导。

我从未注意到或听说过允许 Android 自动扩展资产会对性能产生任何影响 - 大概这是在硬件中完成的。

当自动缩小到 LDPI 时,它可能看起来不太好,所以您可以选择为所有其他密度提供您自己的缩放资产。

取自以下链接

  • ldpi:低密度屏幕;大约120dpi。
  • mdpi:中密度(在传统 HVGA 上)屏幕;大约160dpi。
  • hdpi:高密度屏幕;大约240dpi。
  • xhdpi:超高密度屏幕;大约 320dpi。添加到 API 级别 8
  • nodpi:这可用于您不希望缩放以匹配设备密度的位图资源。
  • tvdpi:屏幕介于 mdpi 和 hdpi 之间;大约213dpi。这不被视为“主要”密度组。它主要用于电视,大多数应用程序不需要它 - 提供 mdpi 和 hdpi 资源对于大多数应用程序来说就足够了,系统将根据需要缩放它们。此预选赛是通过API 级别 13。

清单取自this开发链接以获取更多信息。

这是我在职业生涯中在许多应用程序上使用的方法,包括 Google 和 BBC 的应用程序,并且没有出现任何问题。

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

我们是否需要将所有具有不同 dpi 的图像添加到 Android 应用程序中 的相关文章

  • 有没有办法有一个屏蔽数字输入字段?

    我正在 Android 上创建一个 HTML5 应用程序 对于这个特定场景 我们有一个用于信用卡安全代码的输入字段 我们希望强制输入字段仅包含数字并被屏蔽 我没有运气搜索这个特定的案例 从我自己研究 尝试中可以看出 这不能纯粹通过 HTML
  • 如何使用 ArrayAdapter

    ArrayList
  • 仅允许使用 -Xjvm-default 选项从具有“@JvmDefault”成员的接口继承

    我在Android studio上更新了kotlin版本 ext kotlin version 1 6 10 不幸的是我收到构建错误 仅允许使用 Xjvm default 选项从具有 JvmDefault 成员的接口继承 我怎样才能解决这个
  • 如何将库项目添加到 Android Studio?

    如何添加库项目 例如 Sherlock ABS 到安卓工作室 https en wikipedia org wiki Android Studio 不是针对旧的基于 Eclipse 的 ADT 捆绑包 而是针对新的 ADT安卓工作室 htt
  • 从当前位置出发的移动网络行车路线

    我正在构建一个网站的移动版本 试图通过一键式链接来启动 Google 地图 并提供从用户当前位置到企业的行车路线 我让它在 iPhone 上运行良好 但在 Android 上测试时 它会查看 Current 20Location 并尝试查找
  • Android HTTP-post AsyncHttpClient

    public void postLoginData AsyncHttpClient myClient new AsyncHttpClient RequestParams params1 new RequestParams params1 p
  • Camera.Parameters.FLASH_MODE_ON 在 Moto X 上不起作用

    我正在 moto x 上测试我的应用程序 即使打开闪光灯模式后 闪光灯也无法工作 应用程序在其他设备上运行良好 但在 Moto X 上运行不佳 这是一个代码片段 cameraInstance getCameraInstance camera
  • 检查从 arrayadapter 获取的复选框

    我有标题清单 CheckBox 我想控制默认检查哪一个 所以我试图获得正确的视图并检查它 但由于某种原因它不起作用 知道为什么吗 form checkbox item xml
  • 如何在 Android 应用程序中使用 xmlserializer 创建 xml

    您好 我正在制作一个预订应用程序 我需要在创建 xml 后将 xml 发送到服务器 如何使用创建 xmlxmlserializer创建后将其发送到服务器 http api ean com ean services rs hotel v3 l
  • 为什么 Android Eclipse 不断刷新外部文件夹并花费很长时间?

    我只有一部新的 Android 手机 我一直在修补一些基本的应用程序 每当我保存任何内容时 Eclipse 的 Android 插件就会刷新外部文件夹 这让我抓狂 通常我不会介意 但当需要 10 秒才能刷新时 我开始注意到 我已经搜索过 其
  • overridePendingTransition 显示第二个活动的速度太快

    我有 2 个活动 我想在两个活动之间创建一个动画过渡 以便两个活动的视图向上滑动 就好像第二个活动正在向上推动第一个活动一样 在我的第一个活动中我使用 Intent iSecondActivity new Intent FirstActiv
  • Android 媒体流错误? java.io.FileNotFoundException:没有内容提供者:http://

    我跟着this https github com Old Geek Radio blob master app src main java org oucho radio MainActivity java在 android 中播放流媒体广
  • 如何使用Multipart将图像上传到php服务器

    我一直很头疼 如何将图像上传到服务器 这对我来说是新任务 但对我来说很困惑 我在 stackoverflow 上搜索并用谷歌搜索 但我遇到了问题 我的意图是从 SD 卡上传照片并从相机拍照并上传到服务器 在ios中 这个任务已经完成 在io
  • 防止滚动时自定义 ListView 刷新。我想停止刷新

    我在我的 Android 应用程序中使用自定义 ListView 问题是当我滚动 ListView 时 它会自动清除从 EditText Edittext 作为 list item 输入的数据 并且 ListView 刷新 我想阻止它停止清
  • Android 对 Runtime.getRuntime().exec() 的权限

    我有一个应用程序在清单上具有以下权限 我的应用程序在 Android JB 4 1 2 上运行 UPDATE 我尝试在 JB 上运行该应用程序 但它不起作用 它适用于早期的 API 版本
  • 自定义支持对话框片段文本颜色错误

    如果我放一个TextView在自定义对话框中 文本默认为黑色 不幸的是 支持片段对话框背景是深灰色的 灰底黑字很难读 我可以改变TextView白色或类似的东西android textColor android attr textColor
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我
  • 如何在ListView中标记视图?

    我有一个带有列表视图的应用程序 列表视图工作正常 当我希望列表以标记的某些行开始时 问题就开始了 如果我按下它 我可以标记一行 但是 似乎没有找到一种方法来在初始化时标记任何行 这是我的代码 listViewOfBluetooth getL
  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str

随机推荐

  • Windows 上的 Cython 内存视图

    当尝试在 Windows 上使用 Cython 时 基于 Anaconda 的安装 使用 TDM GCC 因为我需要 OpenMP 支持 我在使用类型化内存视图时遇到了错误 test1 pyx def test int x pass tes
  • 在 PuLP 中添加逻辑约束

    我正在尝试在钢中添加合金 以便以最小的成本将钢的碳含量提高到一定范围 但一个限制是 在现实生活中 机器只能添加至少 50 公斤的合金 因此 如果我们添加某种合金 那么它可以是 50 60 70 千克等 如果我们不添加该特定合金 则可以是 0
  • 将 Interaction.Triggers 设置为 ListBoxItem

    我已将 Interaction Triggers 设置为 ListBox 并在发生 SelectionChanged 事件时执行相应的 TargetedTriggerAction 如下所示
  • 如果私有变量已经是私有的,我应该将它们标记为私有吗?

    据我所知 在 C 中 如果没有另外标记 所有字段默认都是私有的 class Foo private string bar class Foo string bar 我想这两个声明是相等的 所以我的问题是 我应该将私有变量标记为什么priva
  • 数组作为数组[n]和指针数组*

    根据下面的示例 将数组声明为 array n 或指针 array 时有什么区别 我猜想例如 a 和 c 都指向数组的第一个元素 但它们的行为不同 include
  • 列数据内的分隔符问题

    这不是重复的另一个问题 因为我不想删除行 上述帖子中接受的答案与此非常不同 并且not旨在维护所有数据 Problem 来自格式错误的 csv 文件的列数据内的分隔符 尝试过的解决方案 csv module shlex StringIO S
  • 有没有办法自动将 UITextField 绑定到我的数据模型中的变量?

    我正在构建一个视图控制器 其中添加了一堆UITextField以编程方式表达我的观点 我想用从 CoreData 加载的一些文本预先填充文本字段 但允许用户根据需要进入并更改该文本 然后 我需要返回并将新文本再次保存回 CoreData 并
  • 如何在 QEMU 内使用 GDB 对 x86 代码进行源代码级调试?

    我为MBR部分编写了一个x86汇编程序 我编译如下 nasm hellombr asm f bin o hellombr img 然后我在 qemu 中运行它 qemu fda hellombr img boot a 问题是如何在源代码级别
  • 是否可以更改 Lua 字节码中的字符串(内容和大小)以使其仍然正确?

    是否可以更改 Lua 字节码中的字符串 内容和大小 以使其仍然正确 它是关于将字符串翻译为 Lua 字节码 当然 并非每种语言的每个单词的大小都相同 是的 如果你知道自己在做什么的话 字符串以其存储为 int 的大小为前缀 该 int 的大
  • 有没有办法在 WPF 中使用数据模板继承?

    是否可以有DataTemplate组合还是继承 类似于样式中的 BasedOn 有两个例子我需要它 对于继承的类 我有一个带有多个继承类的基类 我不想在每个派生类的模板中重复基类模板DataTemplate 不同的视图 对于同一个类 我想定
  • 如何删除firestore中具有不同id的多个文档? [复制]

    这个问题在这里已经有答案了 我有多个具有不同 id 的文档 我需要实现一些方法来删除它们 我进行了搜索 所以我想我应该使用批处理 所以我的数据库如下所示Image 所以我能够在这样的数组列表中获取我的文档的ID 0Y5rfMK3duHBUT
  • 如何始终在 X 轴上显示“标签”

    如果我多次缩放图形 X 轴上的所有标签都会消失 消失 并且没有可见的 X 轴标签 因此无法理解我在哪里的图形部分 如何强制 matlab 始终在 X 轴上显示标签 并在缩放时自动更新它们并显示足够的数字 以便 邻居 标签必须不同 这取决于您
  • 尝试以编程方式选择 UIWebView 中的文本时 setStart 和 setEnd 抛出错误

    以下是我在 UIWebView 中使用的一些 HTML div span style background color red a href 10 20 This is a link a span div 点击链接后 我想以编程方式选择 U
  • 使用 Spring 的 JSP 中的多个模型属性

    我想要完成的是使用一个表单 使用 Spring 和 JSP 提交多个模型属性 我知道如何做到这一点 将模型与标签映射form form 但是 如果我想在带有注释的控制器方法中获取两个 modelAttributes ModelAttribu
  • JSF 2.0视图参数传递对象

    我试图将一个对象从一个页面传递到另一个页面 其中每个页面都位于不同的视图中 在第一页上 我有一个输入文本 其中 myBean 是一个 ViewScoped Bean 名称是一个对象
  • 从基础实体查找属性的使用情况

    我试图在属性属于基类的类中找到该属性的用法 这是一个令牌示例 class Program class Item public DateTime DeletedStamp get set public decimal Price get se
  • 播放下载 URL 中的视频

    我有一个网址 http fitnation theclientdemos com 9000 media uploads videoplayback 3 JtVCHi1 当我在浏览器上运行此 URL 时 我的 VDO 开始下载 请帮助在视图中
  • websphere 中的 Spring commonj.Workmanager

    在websphere中运行spring的workmanager任务执行器时收到异常 以下是我的代码
  • 如何使用 VBA 创建 CurrentDb 的副本

    我需要使用 VBA 创建 CurrentDB 的副本 大约 12 个副本 这些副本需要是主数据库的克隆 其中包含所有相同的表单 查询等 但仅包含有限的数据集 DoCmd CopyDatabaseFile似乎是为此而设计的 但只有在使用它将数
  • 我们是否需要将所有具有不同 dpi 的图像添加到 Android 应用程序中

    如您所知 Android 应用程序具有不同的 DPI 并且在 Android 应用程序中我们可以添加drawable不同 DPI 的情况ldpi mdpi hdpi and xhdpi文件夹 问题是 当我们想要支持所有 DPI 时 我们应该