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应用的屏幕适配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值