关于Android的不同分辨率图片适配

2023-11-11

看了几篇相关的博客,根据自己的实际开发,总结了一下。


首先要搞清楚,图片的分辨率单位是像素,也就是px,比如72x72的图片,就是长宽都是72px;手机屏幕的分辨率跟图片类似,但是它还有个很重要的指标:dpi,叫做像素密度,代表1英寸长度的屏幕上面显示的像素数量,其实说白了就是屏幕的清晰度,dpi值越大屏幕看上去越清晰。


为什么要适配?因为手机屏幕的dpi种类繁多,如果都用一种固定像素的图片,那么这张图片在低dpi值屏幕上就会显示的比高dpi值屏幕的大,当然,这个前提是按照原图尺寸显示,比如layout文件里面的wrap-content;如果是使用限制大小,比如30dp,开发过的人都知道,这样会造成图片的压缩和拉伸,压缩倒是没什么,拉伸的话图片就会失真看起来模糊了。所以在对视觉图片体验要求越来越高的环境下,就不得不做多屏幕适配了。dpi数值和drawable文件夹对应关系如下:

dpi范围 密度
0dpi ~ 120dpi ldpi
120dpi ~ 160dpi mdpi
160dpi ~ 240dpi hdpi
240dpi ~ 320dpi xhdpi
320dpi ~ 480dpi xxhdpi
480dpi ~ 640dpi xxxhdpi


我们都知道res文件夹下面的drawable文件夹是放置图片的,在eclipse里面系统已经根据不同dpi自动生成了ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxdpi等等文件夹,androidstudio里面需要自己创建,这些文件夹下面就是放置不同分辨率图片的,以上的顺序代表了手机屏幕的dpi值依次增大,我们也都知道系统在运行的时候会根据具体的手机屏幕到相对应的文件夹下面获取图片,但是现实往往是残酷的,通常的情况下给我们开发者的图片都只有一种分辨率的,如果我们粗暴的把这张图片复制粘贴到每个dpi的文件夹下面,就会出现以下各种情况(假如美工是按照1080x1920分辨率的手机屏幕标准给的图片,图片大小540x960,刚好占据屏幕一半面积):

1、如果是手机屏幕尺寸刚好是设计尺寸,系统会到xxhdpi文件夹下面获取图片,而且刚好显示的是设计尺寸;

2、如果手机屏幕是720x1280,那么这个图片所占的屏幕面积就不只一半了,宽度比例:540/720,长度比例:960/1280;

3、同理,如果手机屏幕是1440x2250,那么这个图片所占的屏幕面积就没有一半了。


到这里,肯定会有很多开发者也会这么做:就只把图片放到一个文件夹下面,其他不放。这样的的话,不管什么类型的屏幕都会到这个文件夹下面获取图片,但是问题是放到哪个文件夹下面呢?其实系统在运行的时候会根据文件夹所属的dpi值和屏幕的dpi值的比例来放大或者缩小图片,比如,如果手机屏幕是hdpi的,图片放在xxhdpi文件夹,系统会自动按照这两个dpi比例压缩图片,如果手机屏幕是xxxhdpi的,就会放大图片,这样的效果其实差不多刚好达到我们的要求;但是如果图片放到hdpi文件夹下面,hdpi屏幕显示就会超过一半大小(原理前面说过),如果xxhdpi的屏幕,系统就会按照比例放大图片,但是这张图片本身占这个屏幕一半的,这个时候就会超过一半了;如果图片放到xxxhdpi文件夹下面,同理xxhdpi的屏幕得到的图片会小于设计比例。


综上所述,如果你只有一套图片来做适配,最好是只放到一个dpi的文件夹下面,选择哪个文件夹呢,那就要根据目前市场的主流手机屏幕分辨率情况了,目前应该是xxhdpi屏幕占了主流,然后本着图片压缩总比拉伸好的原则,尽量选择高dpi的文件夹。






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

关于Android的不同分辨率图片适配 的相关文章

  • Android应用程序开发中的EditText警告

    在 xml 文件中声明 EditText 时 我收到了如下警告 没有标签视图通过 android labelFor id id start 属性指向此文本字段 编辑文本代码是
  • Android:如何在多语言资源中重用字符串

    自从我的第一个 Android 项目以来 这个问题一直困扰着我 考虑以 en 作为默认值的多语言字符串资源 res values strings xml lt The default language en res values de st
  • Android Wear:在手持设备上启动服务

    我正在构建一个 Wear 应用程序 它将与手持设备上的 WearableListenerService 进行通信 但是 我想确保当应用程序在手表上启动时服务已启动并运行 我最初的想法是发送意图或广播消息来启动服务 但是 我一直无法弄清楚如何
  • 将片段部分移出屏幕

    我已经被这个问题难住有一段时间了 我试图将包含在 FrameLayout 中的片段向右移动 以便只有片段的左侧 20 可见 我认为我遇到的问题是父级不会让片段移出其边界 或者我不知道如何移动它 我所尝试的一切只是将片段推到右墙上 然后缩放片
  • Android Surface 与 Canvas 的关系

    Surface 和 Canvas 之间到底是什么关系 请解释 表面是一个缓冲区 画布保存绘图 视图未附加到画布 也不是表面 窗户被绑在 Surface 和 ViewRoot 询问 随后使用的画布表面 通过要绘制的视图 详细答案你可以阅读这篇
  • 这样理解Activity类似于iOS中的ViewController就可以了吗?

    这样理解Activity类似于iOS中的ViewController就可以了吗 我很困惑接受 Android 中的术语概念 如 活动 服务 等 是的 我想说 Activity 和 ViewController 非常相似 只有一个很大的区别
  • cordova - 删除不必要的权限

    我需要在游戏中播放声音 因此我将 org apache cordova media 插件添加到我的应用程序中 现在platforms android AndroidManifest xml包含2个我不需要的条目
  • Android 上的嵌套滚动

    我们的活动中有一个主要的水平滚动视图 以及嵌套在其中的几个垂直滚动视图 这个想法是水平滚动 直到找到所需的垂直列表 然后上下滚动 理想情况下 一旦开始垂直滚动 我希望垂直滚动具有 锁定 现在会发生什么 如果您非常小心 您可以垂直滚动 但如果
  • Android - 如何设置所有屏幕的背景颜色?

    维护字体和颜色样式的最佳实践是什么 我制作了一个 color xml 文件 用于更改按钮等单独元素的颜色 但我不确定 Android 希望开发人员如何组织他们的样式 例如 我希望所有屏幕都具有相同的背景颜色 我怎么做 我需要为每个 Acti
  • 终端 (Mac) 上的 ndk-build 命令出错

    这是我在 bashrc 中的环境变量设置 export ANDROID SDK AndroidSDK android sdks export ANDROID NDK AndroidNDK android ndk r8d export PAT
  • 在 Android 的 Recycler View 中的文本视图背景上生成并设置随机颜色

    I am Trying to Generate Random Colors and set the Random color as background of Text View Just Like in GMail app The Tex
  • Android 上 WebRTC 的自定义视频源

    Overview 我想使用自定义视频源通过 WebRTC Android 实现来直播视频 如果我理解正确的话 现有的实现仅支持 Android 手机上的前置和后置摄像头 以下类与此场景相关 Camera1Enumerator java ht
  • Android“权限拒绝:无法使用相机”

    我正在学习有关在 Android 应用程序中使用相机的教程 我收到错误 权限被拒绝 无法使用相机 在模拟器和物理设备上运行调试时 我在清单文件中尝试了各种权限 似乎大多数遇到此错误的人都遇到了拼写错误 缺少权限或权限不在清单中的正确位置 这
  • 如果从超链接打开,应用程序将启动两次

    我正在开发一个应用程序 可以从多个地方启动 例如日历中的超链接 我在以下场景中面临问题 如果应用程序已启动并在后台运行 并且用户单击本机日历中的事件 超链接来启动应用程序 我的应用程序作为新实例启动两次 在正在运行的应用程序列表中 我可以看
  • 以编程方式卸载 Android 应用程序

    我希望能够允许我的用户从我的应用程序中卸载应用程序 就像 Google Play 商店允许其用户一样 请下图 主要问题是如何定义一个按钮 按下它我们可以通过提供包名称或其他一些信息来卸载应用程序 就像图像上的卸载按钮一样 try Inten
  • Android 中 Activity 的服务回调

    我有我的 GPSTracker 的摘要 它返回用户的位置 其作品 public class GPSTracker extends Service implements LocationListener public GPSTracker C
  • onActivityResult() 在 startActivityForResult() 之后未使用 Intent.ACTION_GET_CONTENT 调用

    我得到了我的主要Activity其中持有不同的Fragment的 一个片段使用户可以打开一个DialogFragment 该对话框打开声音文件列表 并且该对话框还包含一个 添加 按钮 用户应该能够从中添加自己的声音文件 为此 我想使用标准的
  • 如何在清单文件中添加符合我意图的标志

    我们知道 我们可以使用 java 代码中的 addFlags 方法将一些标志添加到我们的意图中 有什么方法可以将这些标志添加到清单文件本身中 而不是用 java 代码编写 我需要为清单中的一项活动添加 REORDER TO FRONT 标志
  • Visual Studio代码无法检测到模拟器设备或连接的电话

    I was running my app with vscode using Android emulator or my phone however all of a sudden vscode could not identify an
  • 切换按钮形状不变

    我正在尝试制作一个带有绿色背景的圆形切换按钮 我用了

随机推荐

  • JavaScript详解DOM和BOM(持续更新)

    目录 1 DOM简介 1 1什么是DOM 1 2DOM树 2 如何获取页面元素 2 1根据id获取 2 2根据标签名获取 2 3通过HTML5新增方法获取 ie9以上支持 2 3 1根据类名获取元素的集合 2 3 2querySelecto
  • 简单示例中的多平台Avalonia .NET Framework编程基本概念

    目录 介绍 关于Avalonia 本文的目的 本文的组织 示例代码 解释概念 视觉树 Avalonia 工具 逻辑树 附加属性 样式属性 直接属性 有关附加 样式和直接属性的更多信息 绑定 什么是Avalonia UI和WPF中的绑定以及为
  • 如何在Mac电脑上编译Unity项目至iOS simulator (ipad/iphone)

    如何将Unity项目编译成iOS app 并在虚拟的ipad或者iphone上运行呢 大体步骤分为三步 使用Unity生成 xcodeproj 文件 在Xcode中运行 simulator 通过Xcode编译 xcodeproj 文件 并安
  • Selenium Xpath定位唯一文本元素

    Selenium Xpath定位唯一文本元素 问题概述 现有一网页 已知唯一文本元素a 需要定位父级的同级元素b并抓取文本b text 如何实现 给出案例 tr title td style width 60px class 110084
  • 我想问一下猫狗大战中出现Attempted to use a closed Session.怎么解决

    import os import tensorflow as tf from time import time import VGG16 model as model 自己定义的 import utils 定义了我们所用到的功能函数 fro
  • 2021-07-16(Qt实现图片拖拽功能)

    关于如何使用Qt实现简单的图片拖拽及缩放功能 一 代码实现 二 相关函数的解释 三 代码原理解释 一 代码实现 首先直接放出相关代码 可以根据注释进行一定修改 以下为头文件的内容 ifndef MAINWINDOW H define MAI
  • c#之base和this关键字

    如有错误 欢迎补充
  • ROS主从机设置

    ROS支持多机互通 一台主机启动roscore 启动Master节点 多台从机直接可以运行其他节点 本文记录主从机配置 实现多机互通 查看本机IP地址 ifconfig 其中 enp2s0代表有线网卡 lo代表本地回环 wlp5s0代表无线
  • Sublime Text 3中文乱码问题的解决(最有效)

    Sublime Text 3中文乱码问题的解决 最有效 Sublime Text 3是很好的代码编辑器 没有之一 因为她的性感高亮代码配色 更因为它的小巧 但是它默认不支持GBK的编码格式 因此打开GBK的代码文件 如果里面有中文的话 就会
  • UI控件----ProgressBar进度条 实例总结

    ProgressBar提供了可以向用户展示当前任务的进度 完成效果如下 单击增加 减少进度可以调节进度 完成步骤一 layout的xml文件中activity main xml完成代码
  • LRU的实现

    题目内容 实现一个 LRUCache 类 三个接口 LRUCache int capacity 创建一个大小为 capacity 的缓存 get int key 从缓存中获取键为 key 的键值对的 value put int key in
  • 使用Elasticsearch 出现的拒绝连接

    pom 文件 spring elasticsearch jest uris http 192 168 124 142 9201 data elasticsearch cluster name elasticsearch cluster no
  • 应用向国产架构体系化迁移的三大难点及解决方案

    转载本文需注明出处 微信公众号EAWorld 违者必究 李航 国家信创战略背景下 信创产业从党政 金融等领域高速扩展到电信 制造 教育等更广阔的市场 01 信创工作要解决应用向国产架构体系化迁移的三大难点 保障全面落地 伴随近年来信创实践的
  • pandas.errors.ParserError: Error tokenizing data. C error: Expected 17 fields in line 112, saw 18

    pandas errors ParserError Error tokenizing data C error Expected 17 fields in line 112 saw 18 pandas 简介 pandas 读取csv文件 运
  • 数字化时代,如何从战略设计到架构来打造智慧银行?

    导语 随着人工智能 大数据 云计算等技术向纵深发展 数字化转型已成为银行发展的 必答题 调整战略规划和架构重组 加大信息科技投入 推进科技人才队伍建设 持续推出数字化产品 近年来 深化数字化转型 以科技赋能金融服务已成为不少银行的发力点 今
  • python环境变量配置

    python现在的版本 主要是python2和python3两个大版本 这两个版本有很大的不同 当我们在自己电脑上同时安装了python2 x和python3 x版本的解释器的时候 就需要对环境变量的配置进行一定的修改 大概解释一下 我对环
  • 什么是 前端&后端,始端&末端

    前端 后端 前端和后端是指不同的开发领域和技术 前端指的是用户可见的界面 比如网页 移动应用 游戏等 使用的技术包括HTML CSS JavaScript等 后端指的是用户看不见的部分 比如服务器 数据库 业务逻辑等 使用的技术包括Java
  • 数据结构笔记--图

    数据结构笔记 图 图 本章总结 图的概念 基本术语 抽象数据类型 图的存储结构 邻接矩阵表示法 数组 无向图 有向图 有权图 邻接矩阵的优缺点 代码实现 邻接表表示法 链式 结构 无向图 有向图 邻接表的优缺点 邻接矩阵与邻接表的对比 代码
  • 详解spring的IOC控制反转和DI依赖注入

    转载 详解spring的IOC控制反转和DI依赖注入 2018 06 05 15 45 34 jiuqijack 阅读数 2945 文章标签 spring IOC控制反转 DI依赖注入 更多 分类专栏 spring
  • 关于Android的不同分辨率图片适配

    看了几篇相关的博客 根据自己的实际开发 总结了一下 首先要搞清楚 图片的分辨率单位是像素 也就是px 比如72x72的图片 就是长宽都是72px 手机屏幕的分辨率跟图片类似 但是它还有个很重要的指标 dpi 叫做像素密度 代表1英寸长度的屏