Android适配平板屏幕尺寸

一、划分手机和平板

人为判断方法:

    大于6英寸的就是平板。小于6英寸的都是手机
    平板尺寸: 6英寸、7英寸、10英寸、14英寸…

Android系统支持多配置资源文件,我们可以追加新的资源目录到你的Android项目中。命名规范: 资源名字-限制符
layout/drawble文件夹     说明
layout     默认中等屏幕
layout-small     小屏幕
layout-large     大屏幕
layout-xlarge     特大屏幕
layout-land     横屏
layout-port     竖屏
drawable     默认中等密度
drawable-hdpi     高密度 240dpi
drawable-mdpi     中等密度 160dpi
drawable-xhdpi     更高密度 ~320dpi
drawable-nodpi     所有密度资源,无论什么密度屏幕都会适配
drawable-tvdpi     介于mdpi~hdpi 约213dpi 主要应用在电视

官方说明:

    xlarge screens are at least 960dp x 720dp
    large screens are at least 640dp x 480dp
    normal screens are at least 470dp x 320dp
    small screens are at least 426dp x 320dp

上面是定义广义大小布局资源适配的一个范围,大家可以根据自己的设备知道系统会匹配那个文件的布局。
如果手上有个山寨华为的卖的比较火的mediapad,大家知道分辨率1280*800 密度尺寸7寸
通过勾股定了和分辨率可以得出其密度为215.69。然后根据dp=px/(dpi/160),可以得出个范围593.471。所以这个设备系统会匹配layout-large这个资源布局文件。

注:如果没有指定横屏或竖屏,则上面的布局和位图都适配横竖屏。如果要指定横屏,例如:drawable-land-hdpi竖屏drawable-port-hdpi,还有关键是drawable-xlarge和layout-xlarge,对api level都要求在9之上,等于说,你用android2.2系统的平板或者手机根本不匹配layout-xlarge。因为api level是8。drawable-tvadpi这个api等级需要13以上。
layout-large这个目录其实是个范围。当系统根据当前屏幕的大小和密度,决定程序应该匹配那个目录。你也可以单独定制某些不符合谷歌标准的山寨版layout-l024x600(中间的符合是英文下的x字母),其中1024和600的单位是dp。你可以根据你设备的分辨率和密度,来判断你的设备需要定义那个文件。

但是,官方推荐使用尺寸来表示资源layout-large,不推荐使用分辨率layout-1024*600
运用场景:

为了同时适配手机和平板。
我们在res/目录下创建,layout-large和layout的package,然后我们可以创建一个与layout下相同的activity_main.xml文件
,系统就会根据屏幕分辨率匹配指定的layout中的xml

二.平板-tablet

Android手机系统是2.x,4.x,5.x等,但是Android系统的Tablet设备是从3.0开始的,且3.x系统只有平板才有。Android3.0是专门为平板服务的系统。但是从4.0以后,看起来能运行于手机的也同样能运行于平板。但是,如果使用手机适配的方法用于平板是不可行的。通过查询Google文档可知,Android平板的适配要使用限定符swxxxdp。

原因:手机屏幕的适配是根据资源限定符value-mdpi-xxx或者value-ldpi-xxx。在values文件夹下的dimens文件里没有默认值也没有关系,系统会最匹配原则。但是Tablet设备资源查找的限定符不是mdpi、ldmpi这样的限定符。而是swxxxdp限定符查找。所以如果使用手机屏幕适配的方法来适配,系统不认识mdpi文件夹下的尺寸,会去找values文件夹下的dimens文件里的尺寸。没有找到swxxxdp也没有找到默认尺寸,就会报资源找不到异常。

三.屏幕尺寸限定符sw


对于Android3.0的平板,声明平板Tablet的正确方式是将资源放在有xlarge配置限定符的目录,本质上是使用屏幕尺寸限定符,例如res/layout-xlarge/。为适应多屏幕尺寸,Android3.2引入了更具体的屏幕尺寸指定资源的方式。
设备Tablet在3.0系统时可以使用屏幕限定符small、normal、large、xlarge等命名备用资源,从3.2以后,Tablet使用新的限定符smallestWidth,限定符值为swdp。

选择一个宽度并将其设计为最小尺寸(基本上这个最小宽度要跟ui沟通好,可用ui的设计基准作为最小宽度),或者在布局设计玩完成后测试其支持的最小宽度。

swdp:最小宽度限定符。

例如:(取两个尺寸的最短者)

设备1024x480mdpi=sw480dp

设备1024x600mdpi=sw600dp

设备480x600mdpi =sw480dp

设备480x640mdpi=sw480dp

设备2560x1440mdpi=sw1440dp

sw480dp:中间平板电脑,例如Streak(480x800mdpi)

sw600dp:7英寸平板电脑(600x1024mdpi)

sw720dp:10英寸平板电脑(720x1280mdpi、800x1280mdpi等)
下面附上Android中分辨率,DPI,DP与PX对应关系

| 宽×高(标准值)| 240×320| 320×480| 480×800|720×1280|1080×1920|1440×2560|
| ------------- |:-------------? -----?
| DPI等级 | LDPI | MDPI| HDPI|XHDPI|XXHDPI|XXXHDPI|
|DPI数值|120|160|240|320|480|640|
|对应比例|3|4|6|8|12|16|
|1DP=?PX|0.75|1|1.5|2|3|4

综上得出:dp/ppi/160=px 比如ppi=240,1920,1200的swDP=sw(1200/(240/160))=sw800dp

例子:layout-sw600dp、layout-w600dp和layout-h600dp的区别

一、layout-sw600dp

    这里的sw代表smallwidth的意思,当你的屏幕的绝对宽度大于600dp时,屏幕就会自动调用layout-sw600dp文件夹里面的布局。
    注意:这里的绝对宽度是指手机的实际宽度,即与手机是否横屏没关系,也就是手机较小的边的长度

二、layout-w600dp

    当你的屏幕的相对宽度大于600dp时,屏幕就会自动调用layout-w600dp文件夹里面的布局。
    注意:这里的相对宽度是指手机相对放置的宽度;即当手机竖屏时,为较小边的长度;当手机横屏时,为较长边的长度。

三、layout-h600dp

    与layout-w600dp的使用一样,只是这里指的是相对的高度。
    当你的屏幕的相对高度大于600dp时,屏幕就会自动调用layout-w600dp文件夹里面的布局。

注意:这里的相对高度是指手机相对放置的高度;即当手机竖屏时,为较长边的长度;当手机横屏时,为较小边的长度。但这种方式很少使用,因为屏幕在相对高度上,即在纵向上通常能够滚动导致长度变化,而不像横向那样基本固定,因而这个方法灵活性差,google官方文档建议尽量使用这种方式,这里的单位必须是dp单位。资源使用“最小宽度限定符”swdp用于指定屏幕两边的最小值,而不管设备当前的方向如何。因此使用swdp是指定 布局可用于整体屏幕尺寸的简便方法,它会忽略屏幕的方向。ps:当横竖屏切换时,width和height值也会交换。。
总结:平板的适配基准sw480dp、sw600dp、sw720dp等,手机屏幕的适配基准是mdpi、hdpi、xhdpi等。

四、平板-tablet适配

1、查看设备的具体dpi值

wm size 1080x1920

wm density 240

2.smallestWidth(最小宽度)限定符适配方案

上面说到系统会根据当前设备屏幕的最小宽度 (smallestWidth) 去匹配对应的 values-sw<N>dp 文件夹。
那么怎么确定设备屏幕的最小宽度 (smallestWidth) 呢?

不管屏幕此时是横屏还是竖屏,我们取设备屏幕高度和宽度中值最小的一方认为是最小宽度。

如果想区分屏幕的方向来做适配该怎么办呢?那就只有再根据屏幕方向限定符生成一套资源文件,后缀加上 -land 或 -port 即可,像这样,values-sw400dp-land (最小宽度400dp横向),values-sw400dp-port (最小宽度400dp纵向)

假设:我们的设备的屏幕信息是 1080 * 1920、240 dpi。
设备宽是1080px,高是1920px,那么设备的最小宽度值就是1080px。
但是我们SmallestWidth(最小宽度)的单位是dp,所以我们要将1080px转换成dp。
根据dp和px相互转换的公式,我们得到的SmallestWidth(最小宽度)的值约是 720 dp (1080 / (240 / 160) = 720),设备将匹配到 values-sw720dp 文件夹下的 dimens.xml 文件。

五.基础知识
分辨率:手机的显示屏上能容纳的像素点。比如1080*1920,就是指横向能容纳1080个像素点,纵向能容纳1920个像素点。

dp:也叫dip(device independent pixels(设备独立像素))是一种基于屏幕密度抽象长度单位,对应于160dpi下像素的物理尺寸,对应于160dpi下像素的物理尺寸。

px:像素,屏幕上显示数据的最基本的点。

dpi:是Dots Per Inch的缩写,翻译过来就是每英寸(Inch)有多少点。

Android中的dp和px相互转换的计算公式:

  • dp = px * (dpi / 160)
  • density = dpi / 160
  • dp = density * px
  •  其中dpi是根据屏幕真实的分辨率和尺寸来计算的,公式如下:

1、普通drawable 

drawable-ldpi (dpi=120, density=0.75)

drawable-mdpi (dpi=160, density=1)

drawable-hdpi (dpi=240, density=1.5)

drawable-xhdpi (dpi=320, density=2)

drawable-xxhdpi (dpi=480, density=3)

2、最小宽度sw-<>dp:  指宽高中的最小值,(在不管屏幕方向)

下面是其他最小宽度值与典型屏幕尺寸的对应关系:

320dp:典型手机屏幕(240x320 ldpi、320x480 mdpi(1)、480x800 hdpi (1.5) 等)。
480dp:约为 5 英寸的大手机屏幕 (480x800 mdpi)。
600dp:7 英寸平板电脑 (600x1024 mdpi)。
720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)。

3、dpi 对应的范围

hdpi ~ 160dpi-240dpi

xhdpi ~ 240dpi-320dpi

xxhdpi ~ 320dpi-480dpi

xxxhdpi ~ 480dpi-640dpi

4、图标的适配

mipmap:放置APP启动图标

drawable:放置应用UI图标

drawable各种dpi的目录: 放置需要不同分辨率的图片,例如启动图

Android中Logo图的适配,遵循以下要求,适配时要准确的放置对应的mipmap目录下

36x36 (0.75x) - 低密度 (ldpi)
48x48(1.0x 基准)- 中密度 (mdpi)
72x72 (1.5x) - 高密度 (hdpi)
96x96 (2.0x) - 超高密度 (xhdpi)
144x144 (3.0x) - 超超高密度 (xxhdpi)
192x192 (4.0x) - 超超超高密度 (xxxhdpi)

Logo图标大小

hdpi文件夹 —— 192 x 192

xhdpi文件夹 —— 256 x 256

xxhdpi文件夹 —— 384 x 384

xxxhdpi文件夹 —— 512 x 512

Android中启动图适配,遵循以下要求,适配时要准确的放置对应的mipmap目录下:

480x800(1.0x 基准)- 中密度 (mdpi)
720x1280 (1.5x) - 高密度 (hdpi)
960x1600 (2.0x) - 超高密度 (xhdpi)
1080x1920 (3.0x) - 超超高密度 (xxhdpi)
Android中通知图标适配,遵循以下要求,适配时要准确的放置对应的mipmap目录下:

24x24(1.0x 基准)- 中密度 (mdpi)
48x48 (1.5x) - 高密度 (hdpi)
72x72 (2.0x) - 超高密度 (xhdpi)
96x96 (3.0x) - 超超高密度 (xxhdpi)

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

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

相关文章

C++进阶03 模板与群体数据

听课笔记简单整理&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;听课的记录代码~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅头脑&#x1f338; 审核&#xff1a;文心一言 目录 &#x1f433;课程来源 &#x1f40b;模板 &#x1f40b;8.…

Vue2 —— 学习(六)

一、Vue 脚手架 &#xff08;一&#xff09;介绍 Vue 脚手架是 Vue 官方提供的标准化开发工具 &#xff08;开发平台&#xff09; 脚手架版本最新版本 是 4.x 文档可以查看 http://cli.vuejs.org/zh/ 就是vue 官网文档中 的 vue.cli command line interface &#xff08;…

Python 爬虫基础——http请求和http响应

写本篇文章&#xff0c;我认为是能把自己所理解的内容分享出来&#xff0c;说不定就有和我一样有这样思维的共同者&#xff0c;希望本篇文章能帮助大家&#xff01;✨✨ 文章目录 一、 &#x1f308;python介绍和分析二、 &#x1f308;http请求三、 &#x1f308;http响应四、…

Python项目2 数据可视化

生成数据 数据可视化 指的是通过可视化表示来探索数据&#xff0c;它与数据挖掘 数据挖掘 紧密相关&#xff0c;而数据挖掘指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表 示的小型数字列表&#xff0c;也可以是数以吉字节的数据。 漂亮地呈现数据关…

【论文笔记】Planning-oriented Autonomous Driving

原文链接&#xff1a;https://arxiv.org/abs/2212.10156 1. 引言 目前的自动驾驶工业界通常为不同任务部署不同的模型&#xff0c;但优化的孤立性会导致模块之间的信息损失、误差积累和特征不对齐。 一种更好的设计是将各种任务整合为多任务学习&#xff0c;即为共享的特征提…

设计模式之责任链模式讲解

概念&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有对象处理它为止。最匹配的场景应该就是逐层审批的模式。 责任链模式只有两个角色&#xff…

wife_wife-攻防世界

题目 注册发现可以注册管理员,但是好像有条件 抓包试试 没思路了 看看其他师傅的wp&#xff0c;用到 js 原型链污染攻击 Nodejs原型链污染攻击基础知识 | Savants Blog (lxscloud.top) 网站后端是Node.js搭建的 原型链污染 简单来讲&#xff0c;通过 newUser.__proto__ …

RHCE实验2-DNS服务正反向解析

实验开始 一、DNS正向解析 注&#xff1a; server端&#xff1a;192.168.32.147 node端&#xff1a;192.168.32.141 网址&#xff1a;www.openlab.com 1、server端和node端都关闭安全软件&#xff08;以server端为例&#xff09; [rootserver ~]# setenforce 0 [rootser…

Java基于微信小程序的校园跑腿小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

vue3+element plus图片预览点击按钮直接显示图片的预览形式

1 需求 直接上需求&#xff1a; 我想要直接点击下面这个“预览”按钮&#xff0c;然后呈现出预览图片的形式 ok&#xff0c;需求知道了&#xff0c;下面让我们来看看如何实现吧 ~ 2 实现 template部分 <el-buttontype"primary"size"small"click&qu…

链表中常见的使用方法逻辑整理

文章目录 1. 链表特点2. 链表创建3. 链表遍历通用方法3.1 在链表的开头添加元素3.2 在链表的结尾添加元素3.3 删除链表的第一个元素3.4 删除链表的最后一个元素3.5 遍历链表3.6 查找链表中的元素3.7 反转链表 4. 常见面试题4.1 相交链表4.2 反转链表4.3 环形链表4.4 环形链表 I…

easyui combobox下拉框组件输入检索全模糊查询

前引&#xff1a; easyui下拉组件&#xff08;combobox&#xff09;&#xff0c;输入检索下拉内容&#xff0c;是默认的右模糊匹配&#xff0c;而且不支持选择。因业务要求需要做成全模糊查询&#xff0c;目前网上搜索有两种方案&#xff1a; 1.修改easyui源码&#xff0c;这个…

LeetCode700:二叉搜索树中的搜索

题目描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 代码 递归法 class Solution { public:TreeNode* searchBST(TreeN…

Visual Studio code无法正常执行Executing task: pnpm run docs:dev

最近尝试调试一个开源的项目&#xff0c;发现cmd可以正常启动&#xff0c;但是在vs中会报错&#xff0c;报错内容如下 Executing task: pnpm run docs:dev pnpm : 无法加载文件 E:\XXXX\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 http…

组合导航的结果分段跳变问题

1 现象 用上海代数律动公司的AlgoT1-3组合导航设备采集数据进行组合导航算法调试&#xff0c;AlgoT1-3机器输出的结果很好很平滑&#xff0c;AlgoT1-3是带GNSS/INS的组合导航设备&#xff0c;另外还有一款更贵一点的带视觉的组合导航AlgoT1&#xff0c;效果会更好一些&#xf…

【Tars-go】腾讯微服务框架学习使用03-- TarsUp协议

3 TarsUP协议 统一通信协议 TarsTup | TarsDocs (tarscloud.github.io) TarsDocs/base at master TarsCloud/TarsDocs (github.com) &#xff1a; 有关于tars的所有介绍 每一个rpc调用双方都约定一套数据序列化协议&#xff0c;gprc用的是protobuff&#xff0c;tarsgo是统一…

每日OJ题_01背包③_力扣494. 目标和(dp+滚动数组优化)

目录 力扣494. 目标和 问题解析 解析代码 滚动数组优化代码 力扣494. 目标和 494. 目标和 难度 中等 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; …

ThreadX:怎么确定一个线程应该开多少内存

ThreadX&#xff1a;如何确定线程的大小 在实时操作系统&#xff08;RTOS&#xff09;ThreadX中&#xff0c;线程的大小是一个重要的参数。这个参数决定了线程的堆栈大小&#xff0c;也就是线程可以使用的内存空间。那么&#xff0c;我们应该如何确定一个线程需要多大的字节呢…

C语言-----结构体详解

前面已经向大家介绍过一点结构体的知识了&#xff0c;这次我们再来深度了解一下结构体。结构体是能够方便表示一个物体具有多种属性的一种结构。物体的属性可以转换为结构体中的变量。 1.结构体类型的声明 1.1 结构体的声明 struct tag {member-list;//结构体成员变量 }vari…

MySQL进阶二

目录 1.使用环境 2.排序窗口函数 3.聚合窗口函数 1.使用环境 数据库&#xff1a;MySQL 8.0.30 客户端&#xff1a;Navicat 15.0.12 接续MySQL进阶一&#xff1a; MySQL进阶一-CSDN博客文章浏览阅读452次&#xff0c;点赞9次&#xff0c;收藏4次。MySQL进阶操作一。https…