安卓手机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.0fprivate 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux不小心将/etc/passwd用户文件清空或删除解决方法

大概思路&#xff1a;进入单用户模式将passwd-引子程序复制为删除的passwd用户文件&#xff0c;关闭selinux 此系统为&#xff1a;centos 7 1.在GRUB引导的时候按e进入编辑模式&#xff0c;linux16那一行的ro 修改为rw rd.break ‘ ’ 2.ctrlx执行 3.进入单用户模式后修改根…

springboot学习整理

视频&#xff1a;基础篇-01_springboot概述_哔哩哔哩_bilibili 介绍 spring boot 是spring提供的一个子项目&#xff0c;用于快速构建spring应用程序 spring构建&#xff1a; 1 导入依赖繁琐 &#xff1b; 2 项目配置繁琐 spring Framework: 核心 spring Boot :快速构建spring…

AI学习指南概率论篇-信息论

AI学习指南概率论篇-信息论 信息论是信息科学中的一个重要分支&#xff0c;主要研究信息的量、质和流通规律等问题。在人工智能领域中&#xff0c;信息论被广泛应用于数据压缩、数据传输和模型优化等方面。本文将从信息论的概述、AI中的使用场景、定义和意义以及相关公式讲解这…

win11右键菜单恢复win10风格

有很多朋友升级到win11系统之后不是特别喜欢右键菜单&#xff0c;因为经常需要多点击一次显示更多选项&#xff0c;很不舒服。大家就想知道如何修改回原来win10的右键菜单&#xff0c;今天给大家介绍Win11右键菜单怎么修改为以前的样子&#xff0c;仅需执行2条明路&#xff0c;…

秒杀系统之设计方向

1 秒杀存在的问题 对于一个日常平稳的业务系统&#xff0c;如果直接开通秒杀功能的话&#xff0c;往往会出现很多问题—— 2 设计方向的思考 秒杀本质是要求一个瞬时高发下的承压系统&#xff0c;这也是其区别于其他业务的核心场景。对日常系统秒杀产生的问题逐一进行拆解分…

PostgreSQL自带的命令行工具24- postgres

PostgreSQL自带的命令行工具24- postgres postgres 命令主要是 PostgreSQL 数据库服务器的主要执行文件。当你启动 PostgreSQL 服务时&#xff0c;实际上就是在后台运行 postgres 程序。这个程序负责处理用户请求、执行 SQL 命令、管理数据库文件等核心数据库管理任务。通常&a…

深入理解tengine的sysguard模块

目录 1. 引言2. 开启sysguard模块2.1 编译2.2 配置3. 源码分析3.1 配置参数分析3.2 模块的初始化3.3 ngx_http_sysguard_handler函数3.4 各项负载指标的获取3.4.1 load系统负载的获取3.4.2 cpu使用率的获取3.4.3 内存使用情况的获取3.3.5 请求平均响应时间的获取1. 引言 Tengin…

深入浅出:ConcurrentLinkedQueue源码分析与实战

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

windows驱动开发-inf文件(三)

持续讲解剩下inf节&#xff0c;剩下的几乎都是INF DDInstall 相关的部分&#xff0c;这部分其实非常多&#xff0c;不过我们只讲解最主要的部分&#xff0c;在inf文件说明的最后一篇文档中我们会说明原因。 INF-DefaultInstall 如果要生成 通用驱动程序包&#xff0c;则仅当具…

CentOS使用Docker搭建Nacos结合内网穿透实现无公网IP远程登录本地管理平台

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Nacos Nacos是阿里开放的一款中间件,也是一款服务注册中心&#xff0c;它主要提供三种功能&#xff1a;持久化…

网站服务器备案及域名购买配置教程

一、阿里云服务备案准备工作 1.什么是备案? 备案是指向相关部门提交网站信息,以便监管和管理互联网信息服务,未经备案的网站可能面临罚款甚至被关闭的风险。备案主要看您的网站或App等互联网信息服务解析到的服务器是否在中国内地(大陆),如果服务器在中国内地(大陆),…

探索Python中的文件操作:如何列出一个目录下的所有文件?

在Python中&#xff0c;处理文件和目录是一项常见的任务。无论是在数据科学项目中读取数据集&#xff0c;还是在Web开发中管理用户上传的文件&#xff0c;我们都需要知道如何列出一个目录下的所有文件。本文将通过通俗易懂的语言&#xff0c;为初学者详细讲解如何在Python中实现…

Tkinter组件:Text-显示和处理多行文本

Tkinter组件&#xff1a;Text Text&#xff08;文本&#xff09;组件用于显示和处理多行文本。在 Tkinter 的所有组件中&#xff0c;Text 组件显得异常强大和灵活&#xff0c;适用于多种任务。虽然该组件的主要目的是显示多行文本&#xff0c;但它常常也被用于作为简单的文本编…

kali更新镜像源

1. 什么是镜像源 镜像源一种数据存储和分发技术&#xff0c;通常指的是一个服务器或网站&#xff0c;它存储了另一个服务器或网站上的某些或全部内容的副本。 2. kali更新镜像源 1. 编辑镜像源文件 vi /etc/apt/sources.list 2. 将原来的镜像源用#号注释掉 3. 选择镜像源地址…

LLM应用-文档解析 AI大模型总结分析文档

1&#xff09;https://notegpt.io/pdf-summary 支持总结&#xff0c;思维导图、对话 2&#xff09;chatdoc https://chatdoc.com/ 3&#xff09;chatpdf https://www.chatpdf.com/ https://www.chatpdfs.cn/ 4&#xff09;kimi https://kimi.moonshot.cn/

HTML静态网页成品作业(HTML+CSS+JS)——华为商城网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现首页图片切换轮播效果&#xff0c;共有1个页面…

Cweek1

C语言学习 一.初识C语言 1.如何写C代码 ①创建工程 ②添加源文件&#xff1a;c文件&#xff1a;源文件&#xff0c;h文件&#xff1a;头文件 代码实例&#xff1a; main函数是程序的入口&#xff0c;有且仅有一个 在C语言中&#xff0c;#include <stdio.h> 是一个预…

嵌入式学习-时钟树

时钟树 时钟分类 时钟树框图 LSI与LSE HSI、HSE与PLL 系统时钟的产生 AHB、APBx的时钟配置 相关寄存器 寄存器部分的细节内容请参考手册。 相关库函数

PyQt5中Text Edit的常用方法和常用信号

文章目录 1. 简介1.1. 常用方法&#xff1a;1.2 常用信号&#xff1a; 2. Text Edit的常用方法使用案例3. Text Edit 的常用信号使用案例 1. 简介 QTextEdit是PyQt中用于显示和编辑文本的强大组件之一。它提供了丰富的功能&#xff0c;可以显示普通文本、富文本和HTML文本&…

e行64位V11.17.4 安卓全局虚拟定位APP

e行最新版11.17.4 支持全局虚拟位置 小米手机 百度地图 高德地图 实测成功 其他app自测 不一定支持所有app 下载&#xff1a;https://www.123pan.com/s/HAf9-tsyCh.html