我们是否需要将所有具有不同 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 webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Android:使用 OAuth 访问 google 任务时出现问题

    由于 google 任务没有公共 api 我想编写解决方法并像浏览器一样请求数据 然后解析结果以进一步显示 为了访问数据 我使用 google 实现了 OAuth 身份验证来访问此 url https mail google com htt
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • 自定义选择器活动:SecurityException UID n 无权 content:// uri

    我正在构建一个选择器应用程序来替换本机 Android 共享对话框 它工作正常 除非我尝试通过长按图像 gt 共享图像从 Chrome 共享图像 我发现 Google 没有捕获异常 它崩溃了 所以我可以通过 Logcat 查看它 在 Goo
  • 使用 ADB 命令获取 IMEI 号码 Android 12

    对于 11 之前的 Android 版本 我使用以下命令从我的设备获取 IMEI 号码 adb shell service call iphonesubinfo 4 cut c 52 66 tr d space or adb shell s
  • 如何解决 Firebase AuthUi 中无法找到显式活动?

    使用 firebase UI 时 我无法找到显式活动类 com firebase ui auth KickoffActivity protected void onCreate Bundle savedInstanceState super
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • 如何在TableLayout中创建三列

    我正在开发一个使用的屏幕TableLayout 在这里我可以轻松创建两列 但我怎样才能创建三列呢 这里有一个例子
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • Android FragmentTransaction 自定义动画(未知动画师名称:Translate)

    我正在尝试让自定义动画与我的片段一起使用 我已按照在线教程进行操作 但出现以下错误 java lang RuntimeException 未知的动画师名称 翻译 动画的 XML 如下
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Android:滚动 Horizo​​ntalScrollView 时如何禁用 ScrollView 的垂直滚动?

    我正在开发一个带有带有 ScrollView 的 Activity 的 Android 应用程序 其中包含 Horizo ntalScrollView 等内容 当我触摸 Horizo ntalScrollView 时 我想禁用外部 Scro
  • PhoneStateListener 不调用

    这是我的完整代码 广播示例 java package com example broadcast gt import android app Activity import gt android content Context import
  • 有关 ListView 自定义行布局项目上的 onClick() 事件的帮助

    我有一个 ListView 其行由我格式化 每行都有 ImageView 和 TextView 的混合 我还实现了自己的适配器 并且能够通过它绘制每一行 现在 我想要这样的东西 用户单击 ImageView 不是行上的其他任何位置 但只有此
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 使用单选按钮更改背景颜色 Android

    我试图通过从单选组中选择单选按钮来更改应用程序选项卡的背景 但是我不确定如何执行此操作 到目前为止我已经 收藏夹 java import android app Activity import android os Bundle publi

随机推荐

  • 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 时 我们应该