Android——DisplayMetrics之我见

Android DisplayMetrics 详解 DisplayMetrics详解 阅读详情

Android——DisplayMetrics之我见

写这篇文章主要是因为这个问题困扰我很久,今天终于搞明白了,分享出来供以后查阅。

一、起因

为了适应多屏幕分辨率,可以在res目录下建立不同的layout文件,例如想适应C8500(320*240)和Milestone(854*480),可以在res目录下建立layout-320*240和layout-854*480两个目录,然后在其中定义不同的布局文件就可以了;但在实际中并没有凑效;这是为什么呢;

在真机下调试才发现有问题,Android有个类DisplayMetrics可以得到分辨率等信息,方法如下:

DisplayMetrics metrics;getWindowManager().getDefaultDisplay().getMetrics(metrics);

metrics.widthPixels           屏幕宽

metrics.heightPixels          屏幕高

metrics.density                  屏幕密度

其它用不到的属性就不写了,调试中发现C8500得到的是427*320,而而Milestone得到是569*320;这是为什么呢?难道是Android API有问题?

二、探索

实际上是自己对Android多屏幕分辨率理解不深刻,那么问题出在哪儿呢?这里需要用到一个公式pixels = dps * (density / 160),在SDK中有提到,需要说明一点公式中的density与metrics.density不是一个东西,它们的关系是:metrics.density = density / 160,density的值有120、160、240、320(这在SDK中也有说明);好了直接套用公式就OK了C8500实际分辨率为320*240,密度(也就是metrics.density的值)为0.75,用公式算出来正好是427*320;Milestone实际分辨率是854*480,密度是1.5,算出来是569*320(有四舍五入的);

好吧,按照以上的结论直接在res目录下建立layout-427*320和layout-569*320;分别编写不同的布局文件,OK!问题解决,终于可以适应两个手机屏幕了。

三、没有结束……

真的就这么搞定了吗?似乎没有,把AndroidManifest.xml中android:minSdkVersion=”3″(一直都是3),中3改为4,问题又来了,界面又乱了,在两个手机都乱了;怎么回事呢?再调试,我那个晕,C8500手机屏幕分辨率又变了,变回320*240,套用上面的公式反而又错了,程序又找不到布局文件了,界面自然就乱了,这是WHY   WHY   WHY????

别着急,再来看看问题出在哪儿。查找SDK,加上自己对Android多分辨率的支持的理解,真正的原因应该是当android:minSdkVersion=”3″时也就是此时支持android1.5,在 Android 1.5以及更早的版本中,只支持3.2″ 屏幕上的HVGA (320×480)分辨率,开发人员也不需要考虑界面的适配性问题。从Android 1.6之后,平台支持多种尺寸和分辨率的设备,这也就意味着开发人员在设计时要考虑到屏幕的多样性。

由此可见,在android:minSdkVersion=”3″时,还没有多分辨率的概念,因而此时,DisplayMetrics得到的宽和高是与密度相关的,也就是说此时得到的宽和高都是以dp或dip为单位的,要转换成px才是我们通常据说的分辨率。自android1.6及以后,DisplayMetrics得到的宽和高都是以px为单位的,不需要转换。

总结一下:android的兼容性意味着应用程序api的降级。api的降级意味着在高端机(版本高配置高)上的显示效果配不上。


转:http://cxxowl.sinaapp.com/?p=12


Android屏幕适配 Android屏幕适配方案 阅读详情

相关推荐

Android获取屏幕分辨率及DisplayMetrics简介

Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题。手机的分辨率信 息是手机的一项重要信息,很好的是, Android 已经提供 DisplayMetircs 类可以很方便的获取分辨率。下面简要介绍 DisplayMetics 类:Andorid.util 包下的 DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。为了

zhangqijie001的专栏 8万+

Android屏幕密度的深刻理解

Android中有一个类:DisplayMetrics,官方文档在此:https://developer.android.google.cn/reference/android/util/DisplayMetrics?hl=en DisplayMetrics类描述有关显示器的一般信息的结构,例如其大小,密度和字体缩放。 DisplayMetrics实例对象的获取方式:context.getResources().getDisplayMetrics(); 属性并不多,对于屏幕密度官方描述不够详细,所以这里记录

Android菜鸟的专栏 9661

Android应用DPI修改:DisplayMetrics原理与LSPosed模块开发实践

在Android开发中,屏幕密度(DPI)是决定应用界面显示效果的核心参数之一,它通过DisplayMetrics类管理,直接影响资源加载和布局计算。理解DPI缩放机制对于解决应用适配问题至关重要,其技术价值在于能够修复老旧应用在高分辨率设备上的显示异常,优化平板等大屏设备的视觉体验。通过修改DisplayMetrics中的densityDpi等参数,可以从系统层面强制调整应用的显示密度,这一技术常用于ROM定制和系统级调试。本文以LSPosed模块开发为例,详细讲解如何通过Hook技术实现应用级DPI修改

weixin_30908941的博客 378

Android屏幕适配及DisplayMetrics解析

一、基本概念 dip : Density independent pixels ,设备无关像素。 dp :就是dip px : 像素 dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160,240。我一般称作像素密度,简称密度 density : 直接翻译的话貌似叫 密度。常见取值 1.5 , 1....

alpgao的博客 1111

debian mirrors 镜像源 riscv 64 赛昉 星光 starfive vf2 InRelease‘ doesn‘t support architecture ‘riscv64‘

debian mirrors 镜像 riscv 64 赛昉 星光2 starfive vf2 InRelease' doesn't support architecture 'riscv64'

qq_29758759的博客 1258

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.youkuaiyun.com/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

Android `DisplayMetrics`动态获取屏幕的分辨率和像素密度

在Android应用程序中,你可以使用`DisplayMetrics`类来动态获取屏幕的分辨率和像素密度。以下是如何获取这些信息的示例代码:

m0_59162559的博客 1072

pi-star图形界面安装指南

pi-star图形界面安装指南,MMDVM热点安装,树莓派3B+热点

blueisman的专栏 1909

UART裸机通信全链路解析:从寄存器配置到示波器波形验证

UART(通用异步收发传输器)是嵌入式系统中最基础的串行通信协议,其核心在于异步时序契约——起始位、数据位、校验位、停止位与波特率五要素协同工作。原理上依赖16倍过采样机制保障接收端在比特中间稳定采样,从而容忍晶振偏差与线路抖动;技术价值体现在无需共享时钟即可实现低成本、低功耗、高兼容的点对点通信,成为单片机调试、物联网设备互联和工控现场排障的事实标准。典型应用场景包括STM32与ESP32裸机直连、USB转串口模块(如CH340、FT232R)桥接、以及RS485工业总线通信。本文聚焦UART物理层与协议

weixin_34341117的博客 290

蓝牙HCI Dongle实战:从芯片选型到协议栈集成的完整指南

本文详细介绍了蓝牙HCI Dongle的实战应用,从芯片选型到协议栈集成的完整指南。通过对比CSR8510、nRF52840等主流芯片的性能和价格,提供选型建议和避坑技巧。同时,深入解析Zephyr协议栈移植和常见问题排查,帮助开发者高效完成蓝牙项目开发。

weixin_30786657的博客 322

基础的pdf病毒木马

基础的pdf病毒木马 环境: 攻击机:Kali 目标操作系统:Windows 10或Windows 7 (关闭防火墙和安全软件) 目标软件:Adobe Reader 8.1.2 msf框架搜索:adobe-pdf 1.打开msfconsole 2.搜索 adobe_pdf模块 3.加载攻击模块并设置payload 4.运行生成pdf 5.将pdf拖入到win10 6.打开msf,加...

小小猪的博客 4623

Android DisplayMetrics介绍

0.前言 Android 官方文档解释: A structure describing general information about a display, such as its size, density, and font scaling. To access the DisplayMetrics members(描述显示信息的结构,诸如屏幕大小、屏幕密度和字体缩放) 获取DisplayMetrics使用下面代码 context.getResources().getDisplayMetric

ITMonkeyKing的博客 2126

【ART-Pi与RT-Thread入门】①ART-Pi上手初体验

文章目录关于ART-Pi实物照片板载资源、扩展接口及驱动支持扩展引脚默认固件蓝牙配网微信扫描二维码设备选择 ART-Pi,输入所要连接的 WIFI SSID 和密码配网成功会显示IP地址打开IP地址Finsh控制台配网WindowsmacOS 关于ART-Pi ART-Pi是 RT-Thread 团队为嵌入式软件工程师、开源创客设计的一款极具扩展功能的 DIY 开源硬件。致力打造一个开源的软硬件平台。 实物照片 板载资源、扩展接口及驱动支持 扩展引脚 其中P1排扩展引脚座兼容树莓派的扩展接口,并

SimonLiu的博客 5830

Android使用Displaymetrics类

Android使用Displaymetrics类获取一下手机屏幕中的一些信息      今天被屏幕分辨率虐了几个小时,特意学习一下使用Displaymetrics类获取一下手机屏幕中的一些信息        首先看下文档中的讲解            这个类中包含 描述大小,宽度,字体缩放和其一些其他信息,我们要访问的DisplayMetrics成员,初始化一个这样

Geek Time 2794

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7747

《爬虫和逆向教程》 - 专栏介绍和目录

本专栏为爬虫初学者和进阶开发者量身定制的爬虫和逆向学习园地。为你提供全面而深入的爬虫和逆向技术指导,从入门到精通,从基础理论到高级实战,助你在数据的海洋中畅游,挖掘出有价值的信息。通过本专栏的学习,你将具备独立开发和优化爬虫程序的能力,及逆向分析能力和项目开发能力,成为爬虫领域的佼佼者。

数据知道的博客 2万+

android中DisplayMetrics类的作用

DisplayMetrics类的用法及功能:用来获取的屏幕分辨率 android.util.DisplayMetrics To access the DisplayMetrics members, initialize an object like this: 要想访问显示界面元素,需要初始化这样一个对象  DisplayMetrics metrics = new DisplayMet

wzq330995030的专栏 1814

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android | 屏幕信息DisplayMetrics与不同DPI设备的资源加载

这是 Android 提供的一种帮助开发者适配不同屏幕尺寸和密度的工具。是一个重要的概念,用于描述屏幕的像素密度。这个定义基于一个标准,即认为160dpi为基准密度,这意味着在mdpi屏幕上,1dp(设备无关像素)等于1px(像素)。由于图片在不同分辨率文件夹中会有不同的尺寸,同一张图片在不同设备上解析的内存占用大小可能会不同。Android 会根据设备的屏幕密度自动从不同的。文件夹中加载不同分辨率的图片,最终解析出的图片尺寸不同,导致内存占用不同。而密度的不同,会从不同的。不同分辨率文件夹中的图片,如。

小马快跑的博客 1450

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android 开发 - LayoutInflater、Service、Handler、CountDownTimer、AsyncTask、Notification、DisplayMetrics

Android 开发 - LayoutInflater、Service、Handler、CountDownTimer、AsyncTask、Notification、DisplayMetrics

weixin_52173250的博客 1082

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

安卓DisplayMetrics获取屏幕分辨率

安卓DisplayMetrics获取屏幕分辨率         Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题。        手机的分辨率信息是手机的一项重要信息,很好的是,Android 已经提供DisplayMetircs 类可以很方便的获取分辨率。下面简要介绍 DisplayMetics 类:  

月女冬舞的博客 745

Android突破二之WindowManager、Display、DisplayMetrics类

一、WindowManager类 1.概述:应用程序使用这个接口与窗口管理器对话,并且每个窗口管理器对象都绑定在一个特定的Display类中。为获取一个WindowManager 窗口管理器并显示,可以使用 createDisplayContext(Display) 来为该显示获取一个Context ,然后使用  Context.getSystemService(Context.WINDOW_S

嵌入式Developer_小J的天空 6086
上一篇: Android自定义属性,format详解
下一篇: JNI全攻略之三--JNI头文件分析
wx1qq1com
博客等级 码龄18年 123粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值