当前位置: 首页 > news >正文

android 之简述屏幕分辨率、屏幕密度、屏幕最小宽度

一、屏幕分辨率

屏幕分辨率是指屏幕显示的像素数量,通常以水平像素数乘以垂直像素数表示,例如 1920x1080。它直接影响屏幕的显示效果,包括图像的清晰度和细节。不同的设备可能有不同的屏幕分辨率。

1、常见的屏幕分辨率

  • 标准分辨率:
    480x320(HVGA):早期手机屏幕分辨率
    800x480(WVGA):一些旧的平板和手机
    1024x600(WVGA):一些旧的平板
  • 高清分辨率
    1280x720(HD):一些中低端手机和平板
    1920x1080(Full HD):大多数现代手机和平板
    2560x1440(Quad HD):一些高端手机
    3840x2160(4K UHD):一些高端设备
  • 宽屏分辨率
    1366x768(WXGA):一些笔记本和平板
    1920x1080(Full HD):大多数现代设备
    2560x1440(Quad HD):一些高端设备
  • 其他分辨率
    1440x900(WXGA+):一些笔记本
    1600x900(HD+):一些笔记本
    2048x1536(Retina Display):一些iPad
    2560x1600(QXGA):一些高端笔记本

2、获取屏幕分辨率

在 Android 开发中,通过 DisplayMetrics 类可获取设备屏幕分辨率:

    // 屏幕分辨率(以像素为单位)
    val displayMetrics = Resources.getSystem().displayMetrics
    val screenWidth = displayMetrics.widthPixels
    val screenHeight = displayMetrics.heightPixels
    Log.d(TAG, "screen width: $screenWidth, height: $screenHeight")

二、屏幕密度

屏幕密度(Screen Density)是指屏幕单位面积上的像素数量,通常用每英寸像素数(PPI,Pixels Per Inch)来表示。屏幕密度越高,屏幕上显示的像素就越密集,图像也就越清晰。

1、屏幕密度类别(以dpi为单位):

密度类别PPI范围缩放比例
ldpi(低密度)120dpi0.75x
mdpi(中密度)160dpi1.0x
hdpi(高密度)240dpi1.5x
xhdpi(超高密度)320dpi2.0x
xxhdpi(超超高密度)480dpi3.0x
xxxhdpi(超超超高密度)640dpi4.0x

缩放比例是指相对于mdpi(中等密度)的缩放倍数。例如:

  • ldpi的缩放比例是0.75,表示其像素密度是mdpi的75%。
  • hdpi的缩放比例是1.5,表示其像素密度是mdpi的150%。
  • xhdpi的缩放比例是2.0,表示其像素密度是mdpi的200%。

2、获取屏幕密度

在Android开发中,可以通过DisplayMetrics类获取设备的屏幕密度。

	val displayMetrics = Resources.getSystem().displayMetrics

	// 屏幕密度(以dp为单位)
    // 屏幕密度是指屏幕上每英寸(in)的像素数(Pixels Per Inch,PPI)。
    // 它反映了屏幕的物理像素密度。屏幕密度越高,屏幕显示的像素就越密集,图像和文字就越清晰。
    val density = displayMetrics.density

    // 屏幕密度(以dpi为单位)
    //  ldpi(低密度):120dpi
    //  mdpi(中密度):160dpi
    //  hdpi(高密度):240dpi
    //  xhdpi(超高密度):320dpi
    //  xxhdpi(超超高密度):480dpi
    //  xxxhdpi(超超超高密度):640dpi
    val densityDpi = displayMetrics.densityDpi
    Log.d(TAG, "density: $density, densityDpi: $densityDpi")

3、使用屏幕密度(资源限定符)

为了确保应用在不同屏幕密度的设备上都能良好显示,需要为不同密度的屏幕提供不同分辨率的图片资源。Android支持通过资源限定符来实现这一点。例如:

  • drawable-ldpi / mipmap-ldpi:低密度屏幕的图片资源
  • drawable-mdpi / mipmap-mdpi:中等密度屏幕的图片资源
  • drawable-hdpi / mipmap-hdpi:高密度屏幕的图片资源
  • drawable-xhdpi / mipmap-xhdpi:超高密度屏幕的图片资源
  • drawable-xxhdpi / mipmap-xxhdpi:超超高密度屏幕的图片资源
  • drawable-xxxhdpi / mipmap-xxxhdpi:超超超高密度屏幕的图片资源

使用密度无关像素(dp)
在布局文件中,建议使用dp(density-independent pixels)作为单位,而不是像素(px)。dp是一个虚拟像素单位,它会根据屏幕密度自动调整,从而确保UI元素在不同密度的屏幕上保持一致的显示效果。

三、屏幕最小宽度(smallestWidth)

屏幕最小宽度(smallestWidth)是指设备屏幕的最短边的宽度,单位为dp(密度无关像素)。它不会随着屏幕方向的变化而改变,因此非常适合用于布局适配。

1、计算屏幕最小宽度

屏幕最小宽度可以通过以下公式计算:
smallestWidth = 屏幕最短边的像素数 / 屏幕密度比例

例如,如果设备的屏幕分辨率为1080x1920像素,屏幕密度为320dpi,则屏幕最小宽度为:
smallestWidth= 1080 / (320/160) = 540dp
其中,屏幕密度比例(density)为320dpi / 160dpi = 2。

2、使用屏幕最小宽度适配

为了适配不同屏幕尺寸的设备,可以使用 smallestWidth 限定符来创建不同的资源文件夹,系统会根据设备的屏幕最小宽度自动选择对应的资源文件夹。例如:

  • values-sw360dp:适用于最小宽度为360dp的设备
  • values-sw400dp:适用于最小宽度为400dp的设备
  • values-sw600dp:适用于最小宽度为600dp的设备

3、获取设备的屏幕最小宽度

通过 DisplayMetrics 类可获取设备的屏幕最小宽度。

   // 屏幕最小宽度 dp 值
    val displayMetrics = Resources.getSystem().displayMetrics
    val screenWidthDp = displayMetrics.widthPixels / displayMetrics.density
    val screenHeightDp = displayMetrics.heightPixels / displayMetrics.density
    val smallestWidthDp = min(screenWidthDp, screenHeightDp)
    Log.d(TAG, "Smallest width in dp: $smallestWidthDp")

通过合理使用屏幕最小宽度(smallestWidth)和对应的资源限定符,可以有效实现Android应用的屏幕适配。

相关文章:

  • HarmonyOS学习 实验七:在页面上面添加警告弹窗、自定义弹窗、选择类弹窗、文本选择弹窗、日期选择等等
  • 三个STM32时钟配置函数的区别
  • 08_DCL
  • 安装操作系统后建议做的优化工作
  • AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!
  • 【PCB工艺】软件是如何控制硬件的发展过程
  • 2025年华为杯广东工业大学程序设计竞赛(A最短路,生成树,G数学,最大公因数,I贪心)
  • 记录一次StarRocks集群迁移的经历
  • CentOS 7 全流程部署Magic-PDF数据清洗工具(附GPU加速方案)
  • 珠江桥牌斩获多项殊荣 匠心传承粤菜文化 创新引领调味新风尚
  • TDengine 数据写入优化:协议选择与批量操作(一)
  • SSL证书不可信的原因有哪些?(国科云)
  • Docker安装详细步骤、图文命令解析、包括Docker如何安装卸载MySQL 8容器、常用命令~
  • modus开源程序是一个由 WebAssembly 提供支持的构建代理流的框架
  • MIT6.828 Lab3-1 Speed up system calls (easy)
  • c#使用wpf实现helloworld和login登录
  • sql工具怎么选?
  • 【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装
  • 2.pycharm保姆级安装教程
  • 灵霄破茧:仙途启幕 - 灵霄门新篇-(3)