Android屏幕适配

Android 屏幕适配全攻略(下)-百变屏幕无压力,这才是Android屏幕适配的终极解决方案 但随着智能手机屏幕形态的不断创新,光靠这些基础做法已经不够,开发者们必须进一步掌握更多专业的适配技巧,才能应对屏幕百变的挑战。需要注意的是,不同的可折叠设备可能会有不同的窗口模式支持,开发者需要根据具体的设备和场景进行适配和调整。同时,可以利用 Android Studio 的设备模拟器来进行测试和调试。: 这个 API 可以让开发者获取到屏幕上的"凹槽"区域的信息,包括位置、尺寸等,从而可以更好地适配应用界面。通过这种方式,我们可以确保应用的界面能够完美适配异形全面屏,不会出现内容被"凹槽"遮挡的问题。 阅读详情

一、一些基本概念

1、长度(真实长度):英寸、inch
2、分辨率:density 每英寸像素数 dpi(密度)
3、像素:px
4、dip的公式:px /dip=dpi/160 所以 dip 类似于英寸、长度(dp=dip,sp类似于dip) dip=160*inch
dip= 160/dpi * px
当dip一定时,dpi 越大,px就越大
5、广义分辨率=长px*宽px

二、常用规律

1、平时我们说 手机的分辨率是 320*480的,其实的这里的分辨率是相对分辨率
意思是:水平方向上的像素数是320,垂直方向上像素数是480,
分辨率是160(默认是160,意思是每英寸像素数160)
那么水平方向:320 /160=2英寸
垂直方向:480/160=3英寸
屏幕对角线 是根号13=3.6(这就是常说的3.6英寸屏幕)
2、说一个手机的屏幕参数有三个:长宽像素之积(相对分辨率)、真实分辨率(dpi)、对角线长度
3、模拟器的分辨率都是160,所以像素越大,屏越大
4、l、m、h 三个文件夹是按 真是分辨率dpi 来对应找文件的。

三、解决屏幕适配

1、按像素比 y/开发时用的屏幕像素=x/用户设备像素
2、按长度 用dip(假设屏幕尺寸基本不变)
3、按密度 放在l、m、h文件夹(假设屏幕尺寸基本不变,dpi越大 px越大)
如果手机是hdpi,但hdpi里没有东西,l里有东西,程序就会去l里找图片并且把它按比例放大。
4、单独适配
屏幕分辨率:1024x600
density:1(160)
文件夹:values-mdpi-1024x600
屏幕分辨率:1024x600
density:1.5(240)
文件夹:values-hdpi-683x400 由1024/1.5 600/1.5得到,需要四舍五入。
屏幕分辨率:800x480
density:1(160)
文件夹:values-mdpi-800x480
屏幕分辨率:800x480
density:1.5(240)
文件夹:values-hdpi-533x320 由800/1.5 480/1.5得到,需要四舍五入。
以此类推
一般情况下需要创建出values 、values-mdpi 、 values-hdpi文件夹,以备在一些没有规定的尺寸屏幕上找不到资源的情况。

四、型参数:



ldpi Resources for low-density (ldpi) screens (~120dpi).
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra high-density (xhdpi) screens (~320dpi).

----------------------------------------------------------------
屏幕分辨率为:720 * 1280
绝对宽度:720pixels
绝对高度:1280pixels
逻辑密度:2.0
X 维 :294.96774像素每英尺
Y 维 :285.193像素每英尺
res/drawable下的文件会做失真压缩
res/drawable-nodpi下的文件不做任何处理

五、获取屏幕像素的方法

String str = "";
DisplayMetrics dm = new DisplayMetrics();
dm = this.getApplicationContext().getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
float density = dm.density;
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;
str += "屏幕分辨率为:" + dm.widthPixels + " * " + dm.heightPixels + "\n";
str += "绝对宽度:" + String.valueOf(screenWidth) + "pixels\n";
str += "绝对高度:" + String.valueOf(screenHeight)
+ "pixels\n";
str += "逻辑密度:" + String.valueOf(density)
+ "\n";
str += "X 维 :" + String.valueOf(xdpi) + "像素每英尺\n";
str += "Y 维 :" + String.valueOf(ydpi) + "像素每英尺\n";
ppi的运算方式是:
PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,
dp和px的换算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。
sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。
sp 与 px 的换算公式:sp*ppi/160 = px
总结得出:
px = dp*ppi/160
dp = px / (ppi / 160)
px = sp*ppi/160
sp = px / (ppi / 160)

public class DensityUtil {

    
/**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    
public static int dip2px(Context context, float dpValue) {
        
final float scale = context.getResources().getDisplayMetrics().density;
        
return (int) (dpValue * scale + 0.5f);
    }


    
/**
   * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
   */
    
public static int px2dip(Context context, float pxValue) {
        
final float scale = context.getResources().getDisplayMetrics().density;
        
return (int) (pxValue / scale + 0.5f);
    }
}






欢迎扫描二维码,关注公众号



不同屏幕分辨率适配的values包.zip 安卓开发在不同分辨率下面的自适应处理xml文件 立即下载

相关推荐

Veeam Backup 13 通过UI界面高效备份VMware ESXi虚拟机的完整指南

本文提供了一份使用Veeam Backup 13图形化界面高效备份VMware ESXi虚拟机的完整指南。内容涵盖从环境准备、添加vCenter/ESXi主机、配置备份存储库,到创建备份任务、设置保留策略与计划,以及执行备份和验证成功的关键步骤。通过直观的UI操作,管理员可以轻松实现虚拟机数据的可靠保护与快速恢复。

weixin_29322553的博客 433

移动应用界面设计的尺寸设置及规范

刚接触移动应用的界面设计,最先跳入脑海的疑问是:画布尺寸设计多大(特别是Android)、图标和字体大小怎么定、需要设计多套设计稿么、如何切图以配合开发的实现? 本篇将结合iOS和android官方的设计规范、搜集的资料以及工作中的摸索,来分享移动应用界面设计中的尺寸规范等问题,希望能给移动端的新手设计师些许指引。若有不当之处,欢迎斧正。 一、android篇 1、android分辨率 A

s315250401的专栏 4206

告别以太网瓶颈:手把手教你为AI训练集群搭建InfiniBand网络(以NVIDIA DGX A100/H100为例)

本文详细指导如何为AI训练集群搭建InfiniBand网络,解决以太网瓶颈问题,特别针对NVIDIA DGX A100/H100系统。通过硬件选型、网络架构设计和性能调优,显著提升多机多卡训练效率,适用于大规模模型训练场景。

weixin_30336061的博客 309

lcd像素点密度_常见液晶显示分辨率对应像素密度

液晶屏尺寸主流屏幕分辨率屏幕像素密度(PPI)产品类型800x4803英寸:3113.5英寸:2664英寸:233960x6403.5英寸:3294英寸:2884.3英寸:2681280x7204.3英寸:3414.7英寸:3125英寸:2931920x10805英寸:4407英寸:3142048x1080_2K6英寸:3857英寸:3301280x8007英寸:2158英寸...

weixin_31321157的博客 4648

从逻辑门到存储阵列:NAND与NOR闪存命名与结构原理详解

在数字电路与半导体存储器领域,逻辑门是构建一切复杂功能的基础单元,其输入输出关系定义了计算与存储的基本原理。与非门(NAND)和或非门(NOR)作为通用逻辑门,其真值表和行为模式深刻影响了芯片设计。基于这些原理,现代闪存技术发展出了两种核心架构:NAND Flash和NOR Flash。这两种闪存的命名直接源于其内部存储单元阵列的连接方式,分别模拟了与非门和或非门的逻辑关系。这种结构差异决定了它们根本的技术价值:NOR Flash采用并联结构,支持快速随机读取,适用于代码存储与原地执行(XiP);而NAND

weixin_33377602的博客 337

单片机按键识别篇---单击---双击----长按

  最近做一任务需要使用一个按键实现三种功能,分别是按键单击功能,按键双击功能和按键长按功能,可能之前没有接触过这类按键复用情况,顶多也只是简单识别单击和长按,没有想过双击以上按键功能,也是绞尽脑汁,想了半天,又上网看了些例程,算是对于按键的识别有点小小的了解,感觉这个功能挺实用,在此做个随笔。 一、思路   1.识别长按操作思路:我们使用系统定时器定时,然后让系统每过一段时间去扫描按键I/O...

weixin_30311605的博客 3660

Android中dip(dp)、dpi、ppi、px、density、sp的概念

前言 dp这个单位在Android中使用非常频繁,如果需要指定一个View的大小时,除了使用wrap_content、match_parnet以外,一般会通过dp进行指定,但是当在布局文件中指定android:layout_width="10dp"时,其在手机上到底会显示多大物理宽度? 要解决这个问题得先从dip(dp)、dpi、ppi、px、density、sp这些的概念说起。 概念 dp(d...

weixin_34233679的博客 392

【AAOS】【源码分析】用户管理(五)-- MUMD介绍

MUMD(多用户多屏显示)是Android Automotive OS为车载多乘员场景设计的功能,支持不同座位用户独立操作各自屏幕。

码农的历程 1510

浅谈屏幕适配

谈下屏幕适配

qq_37776700的博客 1865

AD22里面封装修改后,同步到PCB图里面

【摘要】本文介绍了Altium Designer 22中同步更新元件封装的三种方法:1)从PCB库直接更新:在PCB库面板右键选择"Update PCB With[封装名]";2)通过原理图标准更新:使用Design->Update PCB Document菜单;3)在PCB编辑器中验证更新:通过Tools->Update From PCB Libraries菜单。所有方法最终都需通过ECO(工程变更订单)确认变更,建议执行前仔细核对变更内容。这些方法适用于AD22及早期版本

whm128的博客 1758

使用conda环境python3.13和python3.12下安装vllm过程记录

使用conda环境python3.13和python3.12下安装vllm过程记录

没刮胡子的程序员专栏 885

安卓Android屏幕适配,ScreenMatch插件的使用

安卓Android屏幕适配,使用ScreenMatch插件,原理通俗易懂,实践简单易上手

xiaohaha123258的博客 4395

2025年广东省职业院校技能大赛高职组“区块链技术应用”正式赛题解析答案(标准答案参阅)

某公司规划开发一个区块链供应链金融平台,包括核心企业、供应商、银行等角色,通过智能合约代码逐步构建区块链供应链金融平台的基本功能,实现银行向核心企业提供授信并发行数字凭证,企业与企业之间转让数字凭证。此外需要完成区块链供应链金融平台的前后端,实现基本的业务逻辑

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 1269

安卓Android开发中的屏幕适配问题

原文链接:https://blog.youkuaiyun.com/ccit0519/article/details/77945954 1 为什...

timekeeper 652

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

安卓屏幕适配

安卓开发中屏幕适配是绕不开的话题,今天总结下安卓屏幕适配的一些方案和分析下今日头条屏幕适配方案原理; -------------------------------------------------------------方案一屏幕分辩率限定符------------------------------------------------- 屏幕分辨率限定符指的是在res文件夹下创建各种屏幕...

qq_36237165的博客 738

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

2024年Android最全Android 屏幕适配从未如斯简单(已废弃该使用方式)(1),2024年最新安卓界面用什么语言开发

一个月前看了今日头条新的屏幕适配方案,这是传送门,对此不禁拍案叫绝,为此我想把这种方案融入到我工具类中直接一行代码即可适配,如今最新 1.19.0 版已有其最新的适配方案,其相关函数在 ScreenUtils 中,相关 API 如下所示:adaptScreen4VerticalSlide : 适配垂直滑动的屏幕adaptScreen4HorizontalSlide: 适配水平滑动的屏幕cancelAdaptScreen : 取消适配屏幕。

2401_84556837的博客 995

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 屏幕适配dimens,关于android:安卓屏幕适配一键生成dimens文件

工具类import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.PrintWriter;/*** author : Louis* time : 2021-5-19* desc : 一键生成支流的屏幕适配dimens.xml文件*/public class Genera...

weixin_39708708的博客 318

Android屏幕适配总结

1.屏幕适配方案 1. 宽高限定符(分辨率限定符) 穷举市面上所有的手机宽高,生成相应的res文件,如values-19201080,values-1280720,values-1024600等,使用其中一种分辨率(和UI设计一样)作为基准,编写dimens文件,然后其他所有的分辨率根据基准分辨率计算,生成其对应分辨率的dimens文件,使用时,直接按照ui设计图在xml里面使用对应的dimens值,不同分辨率会使用到其对应的dimens下的值。 这一方案有两大问题,问题一,生成dimens文件时比较麻烦,

Kelly 1万+

Android屏幕适配方案,水得我都震惊了

文章目录前言 前言 没有大佬们的辛勤创作,就没有我们搬运工啥事,感动~。总的来说屏幕适配系列的课程讲得一般,刘海屏适配中列出来的各大厂商的参考文档已经算这里面比较有参考价值的资源了。 提示:以下是本篇文章正文内容 一、自定义像素适配 二、手写百分比布局适配 三、修改系统density, densityDpi适配 四、刘海屏适配 五、详解网易云音乐屏幕适配 UI系列文章 ...

让技术为我所用 416

关于Android的屏幕适配,看这篇就够了

一.为什么要进行屏幕适配 先看几个图片 Android设备 从上面图片可以看出...

hunter_zhanghaifeng的博客 4045

Android--开源,安卓自动缩放布局,解决屏幕适配问题

做过安卓开发的都知道,屏幕适配是一件非常困难的事情。 Google官方的解决方案:screens_support 需要写多个layout文件以及dimens.xml,工作量大不说,维护也麻烦。 其实很多时候我们的需求很简单,就是要求不同的屏幕看上去效果一样就可以了。这样就需要我们布局的时候采用百分比来定位。 说到百分比,我们第一时间想到的是layout_weight,但是layout_w

Navan 1137

Android 屏幕适配

Android屏幕尺寸的碎片化很严重,各种分辨率尺寸的设备层出不穷。

佛祖保佑,永无巴戈。 2548

【Android】之屏幕适配

Android 系统能发展到今天,离不开其开源性,但是随着越来越多的设备接入 Android 系统,并对 Android 系统进行各种各样的定制,导致长期以来出现了各种碎片化严重的问题。例如,Android 屏幕尺寸多种多样,如 5 寸、5.9 寸、6 寸、6.1 寸 等等,当然,屏幕分辨率也是多种多样,这很容易导致同一元素在不同手机上显示的效果不同的问题,因此,Android 应用开发中的屏幕适配工作也越来越重要。本篇文章就介绍一下 Android 中屏幕适配相关的知识。

yang553566463的博客 7135

android——屏幕适配

在 Android 开发中,屏幕适配是非常关键的。因为 Android 设备具有各种各样的屏幕尺寸、分辨率和像素密度。如果没有进行良好的屏幕适配,应用可能会出现显示不完整、元素拉伸或压缩变形、字体大小不合适等问题,极大地影响用户体验。屏幕适配是一个综合性的工作,需要结合布局、资源和代码等多种方式,以确保应用在各种 Android 设备上都能有良好的显示效果。

wy313622821的博客 2011
上一篇: 算法系列(十)堆实现优先队列
下一篇: JAVA并发编程(一)JAVA线程池的使用
robert_chao
博客等级 码龄15年 265粉丝 119原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值