位置: 编程技术 - 正文

Android是如何在不同屏幕上适配图片的 -- 或控件大小(android如何使用)

编辑:rootadmin

推荐整理分享Android是如何在不同屏幕上适配图片的 -- 或控件大小(android如何使用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android方法大全,androidru,android的,android如何运行,android xui,android如何使用,android的r,android如何使用,内容如对您有帮助,希望把文章链接给更多的朋友!

转载:

u 首先阐释一些术语和概念

Ø 屏幕尺寸(screen size):实际的物理尺寸,屏幕的对角线测量。为了方便,Android把所有的屏幕尺寸分为了4个广义的大小:小、正常、大、更大。

Ø 屏幕密度(screen density):屏幕占据的物理区域所含像素的个数,通常被称为dpi(dots per inch)即每英寸的像素点数。

Ø 分辨率(resolution):屏幕上物理像素的点数。例如,有一个px*px的屏幕,可以理解为在这个屏幕上横着有条线,每条线上有个像素点。

Ø 像素(px):屏幕上的点。

Ø dip(dp):Density-independent pixel--->与密度无关的像素(下面将详细讲解)

u dpi如何计算

只要我们知道屏幕分辨率、屏幕尺寸(对角线长度),就可以算出相应的屏幕密度,从而根据其范围得出属于那种屏幕密度。

我们可以根据长或者根据宽来计算出dpi,计算公式为:

DPI

或者以下方法

以宽为例:

1.比如分辨率为 × ,则长宽比为1:1.5

2.比如屏幕尺寸为3.6英寸,则根据勾股定理得出,

宽 = (./3.)1/2 = 1.英寸

3.宽为px,分布在1.英寸上,因此密度为/ 1. = .

4.因此此密度约为mdpi的密度

u 决定屏幕清晰度的是什么?

常见的位图的最小组成单位是像素,那么单位物理长度内的像素数越多,图像就会越清晰。很多人都说跟屏幕大小没直接关系,因为还有分辨率,可是如果一个屏幕的分辨率很大,但屏幕也非常的大,那么单位长度内的像素数不一定很大。所以决定屏幕清晰度的是单位物理长度的像素数,也就是上面所说的屏幕密度。

u Android设备屏幕尺寸分布

首先看一下各种屏幕的尺寸和屏幕密度划分,下图是各种屏幕尺寸对应的范围:

图1:

从上图可以看出,对应normal尺寸的屏幕范围集中在常见的3到5寸屏之间,large尺寸对应的就主要是5到7寸的nottpad之类的设备,例如三星的Note和Nexus7平板等,再网上走就是平板电脑了。接下来是屏幕密度(dpi),需要说明的是,平时所说的屏幕分辨率其实不能作为屏幕适配的依据,应该依据屏幕密度和屏幕尺寸来换算,屏幕密度是指每英寸屏幕内容纳的像素数,屏幕密度从ldpi到xhdpi分别对应为dpi、dpi、dpi、dpi,屏幕密度越高、分辨率越高、屏幕尺寸越小就产生了视网膜屏幕。

u dip单位详解

Android规定一个dip的大小相当于dpi屏幕上的一个像素,它是系统为“中等的”密度屏设定的基准密度,在不同dpi屏幕上dp对应的像素数是不同的。需要时,基于当前屏的实际密度,系统会透明地放缩dip单。dip单位根据公式像素&#; = [dip*(dpi/)](px)(其中px是单位)转化为屏幕像素。根据此公式可以计算出一个dip分别在dpi、dpi、dpi、dpi屏幕中对应的像素数分别为0.、1、1.5、2.0,比例为3:4:6:8,如下图。因此,在不同屏幕密度上,以mdpi作为基准,对位图进行3:4:6:8比例的放缩会达到适配的效果。

图2:Android是如何在不同屏幕上适配图片的 -- 或控件大小(android如何使用)

dip与一般的px不太一样,它是独立于屏幕密度的。什么是独立于密度?

先来说下一般的px,如果将一个相同长宽像素的图片放在不同屏幕密度大小的屏幕中,那么,在低密度屏幕中图片会显示的很大,在高密度屏幕中则会显示的很小;但是,如果使用dip为单位的图片显示的效果则是,屏幕密度越大的手机,图片显示的像素也相应增大,这样在屏幕密度大的手机和屏幕密度小的手机上,图片看上去大小基本相同。有了上文对dip的讲解,是否对这个现象有所理解呢?

举个例子来说一下:

现在有三个物理长宽分别为3寸、4寸,屏幕密度分别为dpi、dpi、dpi的手机,则三个屏幕的分辨率分别为px*px、px*px、

将三个手机屏幕的宽分为三等份,则根据dpi的定义,三个屏幕中每等份分别容纳px、px、px。现在假设有一个控件imageview 它的长宽分别为px、px,还有一个px*px的图片资源,当程序运行时,该图片在三个屏幕上会呈现以下效果:

在这三个屏幕上,图片占据的都是px*px的大小范围

如果将imageview的长宽分别改为dip、dip,图片将在三个屏幕上呈现以下效果:

上文提到在这三种屏幕密度下一个dip分别对应0.px、1px、1.5px,所以在三种屏幕上该图片占据px、px、px,各自占屏幕的三分之一,所以看起来是一样大的。

由上文可总结出Android在适配不同屏幕密度时,可以用dip作为控件的单位,视情况放缩dip单位。

当应用没有指出图片对应的控件的大小,Android是如何让图片适配不同屏幕的呢?

在Android2.1之前,开发应用时只有一个放图片资源的drawable文件夹,这样程序在不同屏幕密度的手机上运行时,系统只会从drawable这个文件夹下调图片资源,并且系统会默认认为这个文件夹下的所有资源是为mdpi屏幕提供的,所以在hdpi屏幕上系统会按比例将drawable下的图片扩大为原来的1.5倍,在ldpi屏幕上系统会按比例将drawable下的图片缩小为原来的0.倍。这样会大大降低页面效果。

在Android2.1以及之后,出现了drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi。在这些文件下提供的图片大小最好是3:4:6:8:。程序在不同的屏幕密度下运行时,会首先去符合当前屏幕密度的文件夹下找对应的资源,如果没有,系统会以最省力为前提去别的文件夹下找对应的资源并对其进行相应的缩放,如果还没有,就回去默认的drawable文件夹下找,然后按照2.1之前的规则缩放。如果还没有找到,应用就会报错或者直接crash掉了。

举个例子:现在有一个ldpi的手机屏幕,有一个应用在其上运行(假如只有ldpi、mdpi、hdpi还有drawable四个存放图片的文件夹),并需要调用一个图片a.png(在下文中用a来代替a.png)。Android系统会经历以下流程:

注:

将hdpi中的图片大小缩小为原来的一半相比将mdpi中的图片大小缩小为原来的3/4,计算机要省力,只需进行简单地右移一位操作。所以系统在ldpi下找不到a的时候会首先去hdpi下去找。当存在xhdpi、xxhdpi时,系统会按相同的规则去调用资源。

Drawable-ldpi 3、Drawable-mdpi 4、Drawable-hdpi 6中的3、4、6指的是同一个图片在三个文件夹下的大小之比。

u 总结

Android开发者在做图片适配时需要注意一下两点

1、盛放图片的控件要用dip单位来定义其长宽。

2、 最好在ldpi、mdpi、hdpi、xhdpi、xxhdpi文件夹下提供大小比例为3:4:6:8:的图片。当然如果有质量好的.9.png图片的话,提供一个也可以。

下拉列表框Spinner的使用 效果图:activity_main.xmlSpinnerandroid:id="@+id/spinner1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentLeft="true"/MainActivity.java

Android系统启动过程全解析 原文地址:

Android源代码分析要看这本书 原文地址:

标签: android如何使用

本文链接地址:https://www.jiuchutong.com/biancheng/385122.html 转载请保留说明!

上一篇:Android入门---下拉刷新上拉加载更多策略的实现(android教程下载)

下一篇:下拉列表框Spinner的使用(下拉列表框模糊匹配)

  • 增值税专用发票怎么开
  • 车船使用税代扣怎么计算
  • 商业保险进项税额转出影响成本吗
  • 翻唱歌曲发行时怎么把原唱名字改了
  • 赠送商品如何做账
  • 预提工资计入哪个科目
  • 企业所得税1季度申报季初从业人数个税所属期12月
  • 软件工程质保金
  • 完工百分比法完工进度怎么算
  • 个人开的专票也能抵扣吗
  • 机票报销需要什么单据
  • 公司因担保产生损失
  • 跨年度发现的差错
  • 不动产税征收标准
  • 认购私募股权基金
  • 免税企业可以开具有税率的增值税专用发票吗
  • 增值税专用发票和普通发票的区别
  • 季报资产负债表和利润表的勾稽关系
  • 开票系统维护费可以全额抵扣吗
  • 以前年度损益调整贷方余额表示什么
  • 单张发票不超过1万
  • 建设工程是否可以约定非工程所在地仲裁委仲裁
  • 增值税即征即退会计处理
  • 个人将租来的房子转租如何交税
  • 差额银行承兑汇票
  • mac安装软件不用密码
  • 进项票月初收到能抵上月
  • 出口退税的条件包括
  • mysql输入中文显示乱码
  • 应付税款法账务处理
  • 虎刺梅怎么养殖视频
  • 土地增值税的具体规定
  • npm ERR! code E404 在vscode安装插件时报错的解决方案
  • php操作mysql的特点
  • 报销生育险怎么报
  • laravel引入css
  • php 时间格式转换
  • 安个小窝
  • 持有至到期投资减值准备
  • 在vue中如果computed属性是一个异步操作怎么办?
  • 以前年度损益调整会计分录
  • 暂估价是单价还是总价
  • labview实例教程
  • 网络安全文章1000字
  • vue使用技巧
  • 公司名下商品房过户给公司需要交过户费
  • 一般纳税人按简易办法计税销售额
  • 资本成本在财务报表中怎么体现
  • 缴纳的税费怎么计算
  • 发放职工福利的会计处理
  • mysql sql性能优化
  • 会计政策变更追溯调整的年限
  • 待抵扣进项税额是二级还是三级
  • 研发费用是否包含增值税
  • 待认证进项税额和待抵扣进项税额的区别
  • 教育费附加计入其他应付款吗
  • 如何设置物资采集系统
  • sql server 错误
  • ubuntu 安装
  • windows怎么管理员权限
  • win8系统怎么安装微信
  • vmware虚拟机不能识别iso
  • u盘装系统系统资料会被泄露吗
  • os x yosemite dp5下载地址 os x 10.10 dp5更新内容
  • linux系统中命令什么大小写
  • msworks.exe - msworks是什么进程 有什么用
  • win7电脑桌面图标间隔太大怎么调
  • linux系统的配置
  • android开发范例实战宝典
  • unity锚点
  • jquery右击事件
  • javascript unicode与GBK2312(中文)编码转换方法
  • python线程启动和暂停
  • cocos引擎教程
  • javascript indexOf函数使用说明
  • android获取系统弹窗,自动点击
  • 企业税务代码是什么号
  • 如何电子税务局缴纳社保费用
  • 财务局是什么
  • 城镇土地使用税优惠政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设