关于android屏幕适配问题

android T分屏流程 android T上对分屏流程进行了重构,之前用WINDOWING_MODE_SPLIT_SCREEN_PRIMARY等windowingMode来判断当前窗口是否分屏已经失效;分屏的触发操作放在了wm shell下,运行在systemui进程;将分屏涉及到的reparent、reorder等系列操作封装到WindowContainerTransaction中通过WindowOrganizer的applyTransaction来通知system server进行相关处理实现分屏。 阅读详情

一、首先引用下网络的文章介绍下基本概念

1、基本概念

屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸)。android把屏幕分为以下4种:small,normal,large,extra large。
怎么判断?

屏幕密度(Screen Density) -  一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点)。相比起medium、high屏幕密度的设备,在一块确定大小的屏幕区域l密度为low的屏幕拥有的像素更少。android把屏幕密度分为4种:low,medium,high,extra high。

如何判断是ldpi,mdpi,hdpi?

方向(orientation) -  屏幕方向分为landscape(横屏)和portrait(竖屏)。

分辨率(Resolution) -  屏幕上的总实际像素数。对屏幕进行适配时,一般不关注它的分辨率,只关注它的屏幕大小和密度。

与密度无关的像素(Density-independent pixel,dp或dip) -  为了保证你的UI适合不同的屏幕密度,建议你采用dp来定义程序UI。
它的计算方法为:px = dp * (dpi / 160)

sp(scale-independent pixel)

如何分辨一个屏幕是ldpi、mdpi、hdpi的方法,见下图

计算屏幕密度

2、怎样适配多种屏幕

a.在manifest里定义你的程序支持的屏幕类型,相应代码如下:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]   //是否支持小屏
android:normalScreens=["true" | "false"]  //是否支持中屏
android:largeScreens=["true" | "false"]   //是否支持大屏
android:xlargeScreens=["true" | "false"]  //是否支持超大屏
android:anyDensity=["true" | "false"]    //是否支持多种不同密度的屏幕
android:requiresSmallestWidthDp=”integer”
android:compatibleWidthLimitDp=”integer”
android:largestWidthLimitDp=”integer”/>

b.对不同大小的屏幕提供不同的layout。

      比如,如果需要对大小为large的屏幕提供支持,需要在res目录下新建一个文件夹layout-large/并提供layout。当然,也可以在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

c.对不同密度的屏幕提供不同的图片。
应尽量使用点9格式的图片,如需对密度为low的屏幕提供合适的图片,需新建文件夹drawable-ldpi/,并放入合适大小的图片。相应的,medium对应drawable-mdpi /,high对应drawable-hdpi/,extra high对应drawable-xhdpi/。
图片大小的确定:low:medium:high:extra high比例为3:4:6:8。举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra high为96×96。

不同密度的屏幕对应的图片比例

3、多屏幕适配的4条黄金原则
a.在layout文件中设置控件尺寸时应采用wrap_content,fill_parent和dp。

       具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,fill_parent或dp比pix更好。相应地,为了使文字大小更好的适应屏幕应该使用sp来定义文字大小。

b.在程序的代码中不要出现具体的像素值。

为了使代码简单,android内部使用pix为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕,android建议开发者不要使用具体的像素来表示控件尺寸。

c.不要使用AbsoluteLayout(android1.5已废弃) 。相应地,应使用RelativeLayout。

d.对不同的屏幕提供合适大小的图片。见上面第2部分。

4、需要注意的地方
以上设置适用于android3.2以下的版本。(本人目前开发是在android2.2上,这部分以后再补充)

5、怎样测试你的程序是否支持多屏幕适配
一般使用AVD Manager创建多个不同大小的模拟器,如下图

6、参考文档:http://developer.android.com/guide/practices/screens_support.html


二、然后介绍下 drawable-mdpi、drawable-hdpi

  • 320dp: (240x320 ldpi, 320x480 mdpi, 480x800 hdpi).
  • 480dp: (480x800 mdpi).
  • 600dp: (600x1024 mdpi).
  • 720dp: (720x1280 mdpi, 800x1280 mdpi).

三、 android开发不了适配这样或那样的型号,在这里分享一下自己在开发中用到的方法。drawable-mdpi、drawable-hdpi-1280x800、drawable-hdpi分别代表着分辨率 320X480、1280X800、480X800三款屏幕图片资源包。目前,最好的配置方法,就是一套图片资源(资源文件最好是9.png)和一套布局文件及多套数值文件。


布局文件:


[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <ImageView  
  8.         android:layout_width="@dimen/imagewidth"  
  9.         android:layout_height="wrap_content"  
  10.         android:background="@drawable/ic_launcher" />  
  11.   
  12. </LinearLayout>  
数值文件:

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <!-- values-hdpi 480X800 -->  
  4.     <dimen name="imagewidth">320dip</dimen>      
  5. </resources>  

[html]  view plain copy print ?
  1. <resources>  
  2.     <!-- values-hdpi-1280x800 -->  
  3.     <dimen name="imagewidth">320dip</dimen>      
  4. </resources>  

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <!-- values-hdpi  480X320 -->  
  4.     <dimen name="imagewidth">320dip</dimen>      
  5. </resources>  
开源,安卓自动缩放布局,解决屏幕适配问题 做过安卓开发的都知道,屏幕适配是一件非常困难的事情。 Google官方的解决方案:http://developer.android.com/guide/practices/screens_support.html 需要写多个layout文件以及dimens.xml,工作量大不说,维护也麻烦。 其实很多时候我们的需求很简单,就是要求不同的屏幕看上去效果一样就可以了。这样就需要我们布局的 阅读详情

相关推荐

Android多屏幕适配全攻略

本文还有配套的精品资源,点击获取 简介:Android应用开发中,屏幕适配是确保应用在不同设备上提供一致用户体验的关键。本文详细介绍了Android屏幕分类、资源目录配置、dimens.xml文件的应用、比例适配技术、dp与sp单位的使用、百分比布局和响应式布局的实践、SVG图形资源利用、设计原则和Android Studio工具的运用等多方面知识,旨在帮助开发者全面掌握屏...

weixin_35189483的博客 2675

[转]android – 多屏幕适配相关

1、基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸)。android把屏幕分为以下4种:small,normal,large,extra large。怎么判断? 屏幕密度(Screen Density) -  一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点)。相比起medium、high屏幕密度的设备,在...

iteye_20763的博客 252

【FPGA】安路FPGA下载器驱动安装教程

#来自学渣的问候 最近正在参加19年的FPGA创新设计大赛,然后我们选择了安路(全名:上海安路信息科技有限公司)的 FPGA 开发板。安路算是国产FPGA中还不错的一家,和紫光一样,除了自主生产的FPGA,也开始拥有了自己的编译环境。 好了。言归正传,写这篇博客的原因是,前几天在安装 安路 的编译环境和下载器驱动的时候,出了点问题,弄得心烦意乱。所以打算解决之后写篇博客,避开这个神奇的问题。 首先...

Ninquelote的博客 2万+

android 分屏相关知识点

分屏比例最小值修改 android/frameworks/base/core/res/res/values/dimens.xml的值default_minimal_size_resizable_task 注意:这个值只能比220大,因为如果小的话CTS无法通过,因为CTS里面把这个值写死了220(ActivityAndWindowManagersState.java的DEFAULT_RESIZ...

冰之火的专栏 3619

UART中断接收的实战陷阱:HAL库常见误区与性能调优指南

本文深入解析STM32 HAL库UART中断接收机制,揭示常见实战陷阱如数据溢出、中断优先级配置不当等,并提供性能调优方案。重点介绍如何使用空闲中断处理不定长数据、DMA与中断混合模式优化,以及工业级错误恢复与流量控制策略,帮助开发者构建稳定可靠的串口通信系统。

pea55的博客 747

3D高斯泼溅实战:如何用自采数据集训练出高质量3D模型(附COLMAP避坑指南)

本文详细介绍了使用自采数据集训练高质量3D高斯泼溅模型的完整实战流程。从数据采集规范、COLMAP稀疏重建的深度配置与避坑指南,到数据格式转换及3DGS训练调优策略,提供了针对自采数据的关键参数调整与问题排查方案,帮助读者高效构建专属3D场景。

g9h0i1的博客 979

Android多屏适配完美方案

1.多屏适配的概念 2.屏幕的基础概念 3.如何进行适配 4.现实的适配方案  5.理想的适配方案 。。犯懒,直接贴我做的PPT截图好啦。。。

chutianya的专栏 1365

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

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

timekeeper 652

【nvidia-B200 生产环境】NVIDIA 570.124.06+Cuda12.8 Ubuntu22.04 nccl-test 一键部署脚本(免修改复制即用)

目录1. 初始化与日志记录2. 安装基础工具与配置更新3. NVIDIA 驱动安装 570.124.064. 安装 Mellanox OFED 24.10-2.1.8.05. 安装 CUDA 12.86. 安装 NCCL 和测试7. 配置 rc.local 和其他优化8. B200 单独步骤9. 最终测试与重启10. 完整生产脚本,复制即可直接使用总结 功能: 设置日志目录和日志文件路径。 使用 命令将标准输出和错误输出同时写入日志文件和终端。 记录脚本开始时间,并计算开始的秒数

jundao1997的专栏 2799

【学习系列】SAP RAP 29:如何创建Application Jobs(下)

本文介绍了在SAP系统中通过API创建和使用Application Jobs的方法。主要内容包括:1) 创建RAP应用并通过Action调用API创建Jobs;2) 使用事件驱动方式异步更新Job状态;3) 通过URL跳转到标准日志页面;4) 使用Custom Entity获取Job日志;5) 演示遗留接口IF_APJ_DT_EXEC_OBJECT和IF_APJ_RT_EXEC_OBJECT的使用。文章提供了详细的代码示例,展示了如何通过CL_APJ_RT_API=>SCHEDULE_JOB调度作业,

DeveloperMrMeng的博客 382

【安卓学习之常见问题】 Android 屏幕适配

█ 问题:  ● APP启动后的引导页的图片显示,会变形。  ● 如何不让他变形? █ 实验:  ● 手机的几部手机,查看下屏幕的分辨率,哇塞,竟然都是16:9的:     ● 但实际上并非如此,到【ZOL中关村在线】查下数据对比如下: 参数对比 型号名称 三星W789(电信版) 酷派7060 ...

任我飞的博客 706

华为OD机试真题 新系统【Skill执行链完整性检测】

华为OD机试 新系统真题【Skill执行链完整性检测】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【Skill执行链完整性检测】

qq_45776114的博客 765

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

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

Navan 1137

【YOLOv12改进trick】高效多尺度卷积注意力EMCAD_Block模块引入YOLOv12,实现涨点和效率提升,含创新点Python代码

EMCAD引入YOLOv12模块,实现高效多尺度注意力模块引入到YOLOv12中的快速涨点及效率提升

向上生长的程序媛的博客 852

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

安卓屏幕适配问题

最近项目上线,闲来无事,说下自己在学习过程中的屏幕适配问题 首先,安卓的屏幕碎片化的前提需要我们针对安卓手机要做很多适配问题 1.图片的处理,我们应该创建对应的资源文件进行适配,在这块的处理应该尽量配合UI来进行,一个APP的大小,图片数量的多少,大小,很重要 首先的理解,安卓图片的标准是哪里,一般是mhdpi(720*1280)为基准,也是我们的drawable文件夹 其次 倍

程序小渣渣 516

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

浅谈Android的屏幕适配问题

昨天就没有更新文章,在不更新就说不过去了,今天是清明节的第一天,我没有出去玩,不过在我心里是这么认为的,心中有风景,到哪都是旅游。不好意思,扯远啦,收回来。 做过Android项目的人应该都知道,Android的屏幕适配问题是比较烦人的,因为Android不像IOS那样,只要那几个分辨率,反观Android就不同,Android手机的屏幕分辨率类别太多。虽然本人也没有做过几个Android项目,但是

webbc的博客 615

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android 屏幕适配问题

文章目录Android 屏幕适配问题基本概念ppidpidensitydpsp密度限定符方向限定符转换公式获取屏幕信息适配问题适配方案今日头条方案smallestWidth 最小宽度限定布局适配其他dimens 文件生成工具dimens 文件生成插件 Android 屏幕适配问题 基本概念 ppi ppi(Pixels Per Inch)硬件像素密度:在物理设备上,每英寸包含的物理像素点数量,ppi是不能修改的。 dpi dpi(Dots Per Inch)屏幕像素密度:是软件概念,每英寸包含多少个点,dp

xiangxiongfly 2588

安卓屏幕适配的问题

屏幕适配的问题 首先一般都不需要适配: 良好的屏幕适配习惯: 多用dp,不用px, 多用线性布局和相对布局,不用绝对布局, 如果必须传px的话,将dp转为px之后再使用 这样的话到后期基本上不会有大问题,通过良好的习惯已经解决了这些问题! 如还有问题就用哪五种 图片适配 hdpi -&gt; 480800 设备密度1.5 mdpi -&gt; 320480 设备密度1 ldpi -&gt; 3...

wdx_1136346879的博客 227

android屏幕适配问题

android屏幕适配问题 如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。  首先:你需要在AndroidManifest.xml文件的元素如下添加子元素 supports-screens android:largeScreens="true"        android:normalSc

573

android 屏幕适配问题

android 屏幕适配问题   如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。   首先:你需要在AndroidManifest.xml文件的&lt;manifest&gt;元素如下添加子元素 &lt;supports-screens android:largeScreens="true"    ...

戎马天涯 123

android屏幕适配无效_「Android 屏幕适配终结者」问题汇总

感谢 BlankJ 老师的分享,AndroidAutoSize 已经迭代 10 多个版本,扩展了很多自定义功能,基本能满足所有人的屏幕适配需求,唯一美中不足的就是屏幕适配在某些情况下可能会失效的问题,这一直困扰着 AndroidAutoSize 以及今日头条屏幕适配方案,之前我对于此问题提供了两种解决思路第一个就是在布局显示到屏幕上之前,调用框架提供的方法将 DisplayMetrics 的参数恢...

weixin_39713538的博客 448

Android开发之路:搞懂这几个问题,就掌握了屏幕适配原理

这里我就分享一份资料,希望可以帮助到大家提升进阶。

m0_60388419的博客 957

2024年安卓最全谈谈Android屏幕适配的那些事,我们到底该怎么去选择,2024年最新app内嵌h5页面缓存问题

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

2301_82244718的博客 1282
上一篇: SimpleDateFormat的pattern模式YYYYMMDDHHmmSS
下一篇: android ListView的类IOS通讯录效果,分类ListView,ListView标题置顶
cding1818
博客等级 码龄17年 963粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值