安卓手机APP开发__支持不同的像素深度

安卓手机APP开发__支持不同的像素深度

目录

概述

使用对深度独立的像素

把DP单位转换成像素单位


概述

安卓设备不仅有不同的大小,还有不同的像素深度.一个设备可能在每一英寸上有
160个像素,另一个设备在相同的尺度上有480个像素.如果你不考虑这些不同,
系统可能会缩放你的图片,导致图片失真.

这里展示你如何设计你的APP来支持不同的像素深度,使用的方法是度量独立的
分辨率的单位和为每一个像素深度提供备选的位图资源.


使用对深度独立的像素

使用像素,避免定义距离和大小.因为不同的屏幕有不同的像素深度,定义像素的
维度是一个问题,所有相同数量的像素对应于不同的设备上的不同的物理大小.

为了保证你的用户界面的可见区的大小,在设计你的用户界面时,使用对深度独
立的像素,作为你的度量的单位,叫做DP.一个DP是一个虚拟的像素单位,它约等于
中等深度的屏幕上的一个像素.安卓翻译这个值到不同的深度时的合适的值.

当定义文本的大小时,你能代替使用可缩放的像素(SP)作为你的单位。
SP单位与DP单位的大小一样,默认的是,但是它是基于用户的文本的
大小。对于布局的大小根本不使用SP。

例如,为了指定两个视图之间的空间,使用DP

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/clickme"
    android:layout_marginTop="20dp" />

当指定文本的大小时,使用SP

<TextView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp" />

把DP单位转换成像素单位

在一些情况下,你需要在DP的形式表示维度,并且然后把它们转换成像素。
DP单位到屏幕上的像素的转换如下:

px = dp * (dpi / 160)

注意的是,对上述的公式计算像素时,根本不要硬编码。代替的是使用
TypedValue.applyDimension(),它能转换维度的很多的类型。(dp,sp等)

想像一个APP的一个划动的手势,在用户的手指至少移动了16个像素才能被识别出来。
在一个基线的屏幕上,用户要移动2.5毫米。

在一个高深度的显示器上,用户仅移动1.7毫米就行了。这个距离是更短了,
也就是APP对用户更灵敏了。

为了修正这个问题,要用DP来表这个手势的阈值。然后把它转换成实际的像素值
例如:

Kotlin

// The gesture threshold expressed in dp
private const val GESTURE_THRESHOLD_DP = 16.0f

private var gestureThreshold: Int = 0

// Convert the dps to pixels, based on density scale
gestureThreshold = TypedValue.applyDimension(
  COMPLEX_UNIT_DIP,
  GESTURE_THRESHOLD_DP + 0.5f,
  resources.displayMetrics).toInt()

// Use gestureThreshold as a distance in pixels...

DisplayMetrics的深度的域,指定了转换的系数。在一个中深度屏幕上
这个值等于1,在一个高的深度的屏幕上这个系数是1.5
在一个超高的深度的屏幕上,这个转换系数是2.0, 在一个低的深度的屏幕上
这个系数是0.75

相关推荐

  1. 手机APP开发__支持不同深度

    2024-05-14 06:22:09       15 阅读
  2. 手机APP开发__支持不同平台版本

    2024-05-14 06:22:09       10 阅读
  3. 手机APP开发__支持64位架构

    2024-05-14 06:22:09       13 阅读
  4. 手机APP开发功能之一:通知概述

    2024-05-14 06:22:09       14 阅读
  5. 手机APP开发音频和视频概述

    2024-05-14 06:22:09       16 阅读
  6. 手机APP开发实践_点击行为

    2024-05-14 06:22:09       16 阅读
  7. 手机APP开发___设置闹钟

    2024-05-14 06:22:09       10 阅读
  8. 手机APP开发____activity简介

    2024-05-14 06:22:09       7 阅读
  9. 手机APP开发工作台简介

    2024-05-14 06:22:09       16 阅读
  10. 手机APP开发__媒体开发部分__APK裁剪

    2024-05-14 06:22:09       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-14 06:22:09       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-14 06:22:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-14 06:22:09       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-14 06:22:09       20 阅读

热门阅读

  1. Flutter 中的 Theme 使用:全面指南

    2024-05-14 06:22:09       20 阅读
  2. 批量获取oracle库存储过程

    2024-05-14 06:22:09       10 阅读
  3. 01-02-5

    01-02-5

    2024-05-14 06:22:09      12 阅读
  4. 交互项回归VS分组回归

    2024-05-14 06:22:09       10 阅读
  5. 分布式队列 - 蓝桥杯2024年第十五届省赛真题

    2024-05-14 06:22:09       14 阅读
  6. 分布式自媒体项目实战

    2024-05-14 06:22:09       9 阅读
  7. ajax的请求解密

    2024-05-14 06:22:09       12 阅读