Android适配解决方案

Android屏幕适配 Android屏幕适配方案 阅读详情

现在电视一般都是1080p,手机大部分也是1080p,但是电视动不动就是42”,手机也就5英寸,但是电视为什么还是这么清晰呢?
昨天就这个问题去找答案,结果最后扯到了Android的适配上,本来吧我觉得自己开发Android这么久了,适配什么的早已不是问题,但是图样图森破啊,还是太年轻。

目录(已经掌握的部分可以跳过):
基础知识(dp,px,dpi,sp,dip)
Android碎片化
不同碎片化问题的解决方案
(一)基础知识

inch 英寸,1inch = 2.54cm

px,像素,1080p后面的这个p就是它了,1920*1080是指这块屏幕上一共有这么多个像素,长边有1920个,短边有1080个像素。

dpi,即dot per inch,指一inch上的像素数量。

dip,设备独立像素,以160dpi为基准,在160dpi的设备上,1dip = 1px;同理,320dip的设备,1dip = 2px。不管什么分辨率的设备,1dip = 1(inch)/160。

dp,同dip

(二)Android碎片化

Android由于其开源的特性,导致碎片化问题严重,其碎片化包括系统碎片化,分辨率碎片化,尺寸碎片化,传感器碎片化,处理器碎片化。我们做适配最多的就是分辨率碎片化和尺寸碎片化,本文主要讲解的也是这两种。

sp,其大小计算同dp,与dp的差别在于它会受系统字体大小设置的影响。

(三)解决方案

分辨率碎片化
a.使用相对布局,不用绝对布局,使用 wrap_content,match_parent

b.使用布局别名,布局别名的使用有两种方式,下面详细说明:

第一种:直接新建不同的layout文件夹,layout-mdpi,layout-land等等,然后再里面分别放上对应的布局文件。

第二种:将所有的布局文件都放到layout文件夹中,然后新建不同的values文件夹来引用这些布局文件,比如values,values-sw720dp等等。
推荐用第二种方式,这种方式还可以对dimens,styles等做适配

c.给不同分辨率的图片,现在1080p和720p的比较多。所以一般给出mdpi,hdpi,xhdpi,xxhdpi。
其对应的分辨率如下:

尺寸dpi倍数给1920*1080
ldpi120-1601x
ldpi160-2401.5x
lhdpi240-3202x0.17
mdpi320-4803x0.25
hdpi480-8005x0.42
xhdpi720-12808x0.67
xxhdpi1080-192012x1
xxxhdpi2160-384024x2

d.合理使用.9图,对于边角不那么多的图片可以用.9图来保证拉伸效果。

e.上面说的方法属于比较常规的适配方案,下面着重说一下尺寸碎片化的处理。Nexus 5是1980*1080,屏幕尺寸是5.0;Nexus 5X分辨率也是1980 * 1080,但是尺寸是5.2。这种情况对于手机来说差别可能不是很大,不是对效果特别追求的话可以忽略,但是对于平板和电视来说尺寸差异就很大了,此时如果再按照分辨率适配的方案来处理,轻则样式错误,重则由于资源问题导致OOM等问题。

对于这种,应该使用尺寸限定符,比如layout-sw320dp,values-sw320dp,意思是设备的最窄边大于等于320dp的时候会使用对应的布局和资源

f.Android官方之前放出了了一个百分比布局的support包,这个包在

AndroidSDK\extras\android\support\percent

这个目录下,布局可以使用百分比来确定位置,谷歌在适配上走了一大进步啊。

g.讲到这里,顺便把国际化命名对应表放在这里,免得用的时候到处找:
用的时候这样:values-ar-rEG , drawable-ar-rEG-hdpi

Arabic, Egypt (ar_rEG) —————————–阿拉伯语,埃及 
Arabic, Israel (ar_rIL) ——————————-阿拉伯语,以色列 
Bulgarian, Bulgaria (bg_rBG) ———————保加利亚语,保加利亚 
Catalan, Spain (ca_rES) —————————加泰隆语,西班牙 
Czech, Czech Republic (cs_rCZ) —————–捷克语,捷克共和国 
Danish, Denmark(da_rDK) ————————丹麦语,丹麦 
German, Austria (de_rAT) ————————-德语,奥地利 
German, Switzerland (de_rCH) ——————-德语,瑞士 
German, Germany (de_rDE) ———————-德语,德国 
German, Liechtenstein (de_rLI) ——————德语,列支敦士登的 
Greek, Greece (el_rGR) —————————-希腊语,希腊 
English, Australia (en_rAU) ————————-英语,澳大利亚 
English, Canada (en_rCA) ————————–英语,加拿大 
English, Britain (en_rGB) —————————-英语,英国 
English, Ireland (en_rIE) —————————–英语,爱尔兰 
English, India (en_rIN) ——————————–英语,印度 
English, New Zealand (en_rNZ) ———————英语,新西兰 
English, Singapore(en_rSG) ————————–英语,新加坡 
English, US (en_rUS) ———————————–英语,美国 
English, Zimbabwe (en_rZA) ————————–英语,津巴布韦 
Spanish (es_rES) —————————————-西班牙 
Spanish, US (es_rUS) ———————————–西班牙语,美国 
Finnish, Finland (fi_rFI) ———————————芬兰语,芬兰 
French, Belgium (fr_rBE) ——————————-法语,比利时 
French, Canada (fr_rCA) ——————————-法语,加拿大 
French, Switzerland (fr_rCH) ————————–法语,瑞士 
French, France (fr_rFR) ——————————–法语,法国 
Hebrew, Israel (he_rIL) ———————————希伯来语,以色列 
Hindi, India (hi_rIN) ————————————-印地语,印度 
Croatian, Croatia (hr_rHR) —————————-克罗地亚语,克罗地亚 
Hungarian, Hungary (hu_rHU) ————————匈牙利语,匈牙利 
Indonesian, Indonesia (id_rID) ————————印尼语,印尼 
Italian, Switzerland (it_rCH) —————————-意大利语,瑞士 
Italian, Italy (it_rIT) —————————————意大利语,意大利 
Japanese (ja_rJP) —————————————-日语 
Korean (ko_rKR) ——————————————朝鲜语 
Lithuanian, Lithuania (lt_rLT) ————————–立陶宛语,立陶宛 
Latvian, Latvia (lv_rLV) ———————————拉托维亚语,拉托维亚 
Norwegian-Bokmol, Norway(nb_rNO) —————挪威语,挪威 
Dutch, Belgium (nl_rBE) ——————————–荷兰语,比利时 
Dutch, Netherlands (nl_rNL) —————————荷兰语,荷兰 
Polish (pl_rPL) ——————————————-波兰 
Portuguese, Brazil (pt_rBR) —————————葡萄牙语,巴西 
Portuguese, Portugal (pt_rPT) ————————葡萄牙语,葡萄牙 
Romanian, Romania (ro_rRO) ————————罗马尼亚语,罗马尼亚 
Russian (ru_rRU) —————————————-俄语 
Slovak, Slovakia (sk_rSK) ——————————斯洛伐克语,斯洛伐克 
Slovenian, Slovenia (sl_rSI) —————————-斯洛文尼亚语,斯洛文尼亚 
Serbian (sr_rRS) —————————————-塞尔维亚语 
Swedish, Sweden (sv_rSE) —————————-瑞典语,瑞典 
Thai, Thailand (th_rTH) ——————————–泰语,泰国 
Tagalog, Philippines (tl_rPH) ————————–菲律宾语,菲律宾 
Turkish, Turkey (tr_rTR) ——————————-土耳其语,土耳其 
Ukrainian, Ukraine (uk_rUA) ————————–联合王国 
Vietnamese, Vietnam (vi_rVN) ———————–越南语,越南 
Chinese, PRC (zh_rCN)——————————–中文,中国 
Chinese, Taiwan (zh_rTW)—————————–中文,台湾

附录:启动图标

L DPI ( Low Density Screen,120 DPI ),其图标大小为 36 x 36 px
M DPI ( Medium Density Screen, 160 DPI ),其图标大小为 48 x 48 px
H DPI ( High Density Screen, 240 DPI ),其图标大小为 72 x 72 px
XH DPI ( Extra-high density screen, 320 DPI ),其图标大小为 96 x 96 px
XXH DPI( xx-high density screen, 480 DPI ),其图标大小为144 x 144 px
XXXH DPI( xxx-high density screen, 640 DPI ),其图标大小为192 x 192 px

最后回答开头提出的问题,是因为电视上每一个像素很大,比手机上的一个像素大得多,所以电视虽然那么大,它也是1080p的。因为一个像素很大,所以你不能凑上去看,不然会看到马赛克哦。

Android用命名含sw的文件夹做屏幕适配原理 适配2k屏 阅读详情

相关推荐

安卓学习,android屏幕适配终极解决方案

infalte(这个参数是通过那个资源文件创建菜单,创建的菜单项添加到那个Menu对象当中) override fun onCreateOptionsMenu(menu: Menu?): Boolean { super.getMenuInflater() menuInflater.inflate(R.menu.main,menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { when(item.ite

wqwq_22的博客 396

Android屏幕values-sw适配

一、适配原则Android3.2之后可以通过values后面添加不同的后缀进行适配不同的手机的布局。因为项目中采用了values-sw的方式,所以针对该种方式做了自己的一些调研和研究。 values-sw360dp,sw理解为smallwidth,该最小宽度的计算方式为:屏幕宽度/屏幕密度。其中屏幕宽度为metric.widthPixels/metric.density。通过对一些手机进行打印计算,

nihaomabmt的专栏 1万+

精简高效的Android全屏适配解决方案

根据实际需求,可以选择不同的适配方法来实现更精确的适配效果。使用dimens资源:通过在res/values目录下的dimens.xml文件中定义不同屏幕尺寸和纵横比下的尺寸值,可以在布局文件中引用这些尺寸值,实现适配。全屏适配的目标是使应用程序在各种屏幕尺寸和纵横比下都能正确显示,并且不会出现裁剪、变形或显示过多空白区域的情况。使用限定符:Android提供了一系列限定符(qualifier),可以根据屏幕尺寸、纵横比、像素密度等特征来选择不同的资源文件,从而实现适配。

CodeShiftZ的博客 290

Android 屏幕适配方案汇总

android 屏幕适配方案汇总

qq_17769455的博客 479

自动生成values-sw 值工具类

通过该工具类,可以自动快速生成常见的values-sw"xxx"dp值,完成屏幕适配。也有博主通过工具类已生成的现成值,可以直接拿到项目中用,包含了dp和sp值

深入剖析:NAND Flash与SD NAND(贴片式SD卡)存储扇区分配表架构差异与优化策略

本文深入探讨了NAND Flash与SD NAND(贴片式SD卡)在存储技术中的架构差异及其优化策略。NAND Flash作为非易失性存储器,依赖主控芯片进行坏块管理和磨损均衡,而SD NAND则通过内置控制器和标准文件系统(如FAT)简化了存储管理。两者在写入性能、容量扩展和可靠性方面各有优劣,NAND Flash需通过磨损均衡和写入合并优化性能,而SD NAND则通过高容量和高速传输提升效率。文章为嵌入式系统开发者和硬件工程师提供了关于如何根据需求选择并优化存储介质的参考。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1236

Android 适配-最小宽度限定符 values-sw“xxx“dp 适配

Android 适配-最小宽度限定符 values-sw"xxx"dp 适配。 1、以320dp作为最小宽度生成其它最小宽度资源。 320dp基准:<dimen name="size320">320dp</dimen> 存放到默认values文件夹中。 2、生成其它最小宽度资源,比如想得到400dp最小宽度的,则用400/320*(1dp-320dp)。 320dp最小宽度基准: 计算出4000dp最小宽度基准:values-sw400dp 得到values-s.

Hly的博客 4007

功能安全入门:手把手教你用IEC 62380标准计算芯片失效率(附SN 29500对比)

本文深入解析了IEC 62380标准在芯片失效率计算中的应用,对比了SN 29500的差异,并提供了实战案例和避坑指南。通过详细的参数获取方法和分步计算演示,帮助功能安全工程师准确评估芯片可靠性,确保设计符合安全要求。特别适合汽车电子和工业控制领域的专业人士参考。

weixin_30363981的博客 312

Android 屏幕适配:最全面的解决方案

Android 屏幕适配:最全面的解决方案 - 简书 (jianshu.com)

edmond999的专栏 199

2025年06月中国电子学会青少年软件编程(图形化)等级考试试卷(三级)答案 + 解析

2025年06月中国电子学会青少年软件编程(图形化)等级考试试卷(三级)答案 + 解析

伶俐角少儿编程 340

北斗导航 | 从北一到北二再到北三,你应该知道的北斗导航系统

博主github:https://github.com/MichaelBeechan 博主优快云:https://blog.youkuaiyun.com/u011344545 一、引言 我国高度重视北斗系统的建设和发展。自20世纪80年代开始探索适合我们国家国情的卫星导航系统发展道路,形成了“三步走”的发展战略:2000年底,建成北斗一号导航系统,向我国广大用户提供服务;2012年底,建成北斗二号导航系统,...

尘世冰封的专栏 3078

安卓屏幕适配解决方案

安卓屏幕适配解决方案 国内安卓手机众多,由于安卓是开源的,不同厂商都可以定制属于自己的系统,定制这就导致了屏幕的不同意,给开发人员带来了很多困扰啊,屏幕适配就是很明显的一个问题。 我们先引入几个概念 dp px dpi density dp:dp=dip只是说法不同 px:像素 (这个就不用多说了) dpi:每英寸的像素点数。 density:每平方英寸像素点数。 这里给出他们之间的换算公式:...

weixin_41078100的博客 1405

第六部分:VTK进阶(第182章 体素化与隐式建模)

本文系统介绍了基于点云构建有符号距离场(SDF)的核心原理与VTK实现方法。主要内容包括:1)SDF的基本概念与算法原理,通过体素网格隐式表达几何表面;2)关键参数配置指南,如体素分辨率、边界范围和影响半径的选择;3)点云法向估计、SDF计算与等值面提取的完整工作流程;4)常见问题解决方案与性能优化建议。文中提供了详细的C++代码示例,展示从随机点云生成SDF并重建曲面的完整过程,特别强调了法向估计、参数调优和后处理等关键环节。该方法适用于点云表面重建、几何处理等应用场景。

仰望星空的博客 526

最全面Android屏幕适配解决方案

https://blog.youkuaiyun.com/wangwangli6/article/details/63258270 前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文档 郭霖: Android官方提供的支持不同屏幕大小的全部方法 Stormzhang:Android 屏幕适配 鸿洋:Android 屏幕适配方案 凯子: ...

快乐李同学的博客 1502

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 581

如何将 Fiori Elements Object Page Header 工具栏里按钮用 JavaScript 代码设置成禁用状态

本文介绍了如何在SAP Fiori Elements应用中动态控制Object Page工具栏按钮的可用状态。通过UI5 Inspector工具分析发现,这些按钮的enabled属性都双向绑定到/ui/enabled模型字段。在StatusExt.controller.js中,通过获取按钮ID前缀拼接完整控件ID,使用setEnabled(false)方法即可禁用按钮。关键点包括:1)使用extensionAPI获取视图ID前缀;2)注意事件回调中的this上下文绑定;3)通过修改模型字段可同步更新所有绑定

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 369

Android屏幕适配解决方案

本文参考自: Google的官方权威适配文档 郭霖:Android官方提供的支持不同屏幕大小的全部方法 Stormzhang:Android 屏幕适配 鸿洋:Android 屏幕适配方案 凯子:Android屏幕适配全攻略(最权威的官方适配指导);简书作者:Carson_Ho Android的屏幕适配一直以来都在折磨着我们Android开发者,本文结合以上参考 给你带来一种全新、全面...

hasayaqimomo的专栏 278

2025年华为杯中国研究生数学建模竞赛E题 高速列车轴承智能故障诊断问题 思路+代码

all_data, file_info = preprocessor.load_mat_files(file_list[:50]) # 加载前50个文件作为示例。[y_source, y_source, domain_labels], # 注意:这里使用伪标签。X_target = np.random.randn(100, X_source.shape[1], 1) # 示例数据。"""构建CNN-Transformer混合模型""""""构建Transformer模型"""

YOLO 1046

安卓开发中适配不同屏幕尺寸分辨率的解决方案有哪些?

综上所述,安卓开发中适配不同屏幕尺寸和分辨率的解决方案涵盖了多个方面,包括使用资源限定符、dp和sp单位、百分比布局、屏幕适配框架、响应式布局设计、动态加载资源、使用自适应单位以及考虑屏幕方向变化等。开发者可以根据具体需求和项目情况选择适合的适配方案。

qq_43664361的博客 1284

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

安卓应用开发中屏幕适配问题详解及解决方案

摘要 Android应用开发中,屏幕适配是核心挑战之一。由于设备屏幕尺寸、分辨率和像素密度差异巨大,不当适配会导致布局错乱、控件重叠、字体显示异常等问题。本文分析了典型适配问题现象,并深入解析了像素(px)与密度无关像素(dp)的区别、屏幕密度分类(dpi)及资源选择机制。解决方案包括:1) 使用dp/sp作为尺寸单位;2) 提供多套图片资源并优先使用矢量图(Vector Drawable);3) 采用自适应布局策略。通过系统性的适配方法,开发者可确保应用在不同设备上呈现一致的用户体验。

深山技术宅的博客 827

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

让技术为我所用 416

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android 屏幕适配:各种解决方案

Android屏幕适配个种解决方案

lhzjllh的博客 1万+

安卓类似华为手机适配底部虚拟按键的解决方案

场景1:华为手机遮挡了屏幕底部。 场景2:进入应用时,虚拟键自动缩回,留下空白区域。 需求: 需要安卓能自适应底部虚拟按键,用户隐藏虚拟按键时应用要占满整个屏幕,当用户启用虚拟键时,应用能往上收缩,等于是被底部虚拟按键顶上来。 需求很简单,实现起来却困难重重,公司抠门,连个带虚拟键的手机也不配一部~~。 完美解决方案: 解释一下下面的代码,就是监听某个视

Me_Dong的博客 1万+

安卓进阶(11)之UI适配解决方案

博客内容 有些UI设计师给到我们的设计图的宽的单位是px(比如1080*1920),有的给到我们的的单位是dp(比如360dp),我们没法保证设计师到底给出哪一种,而且,给到我们的设计图的尺寸,我们除了适配常规的尺寸,还得适配非常规的手机分辨率。那具体我们应该怎么去做适配呢? 看了几篇帖子,都是人家用过非常成熟的,适用场景比较多的方案了。我自己总结了下,分为两种解决方案,一种是单位以px为参照物,...

罗小辉的专栏 1150

Android11适配拍照问题解决方案:让应用程序摄影功能无忧

Android11适配拍照问题解决方案:让应用程序摄影功能无忧 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在Android 11发布后,不少开发者遇到了适配问题,特别是在应用程序中集成拍照功能时。针对这一问题,本仓库提供了一套全面的Android11适配拍照问题解决方案,适用于targetSDK版本为31的应用程序。该方案涵盖了拍照、从相册选择图片,以及获取图片路...

gitblog_06754的博客 299
上一篇: 一分钟学会Android--ContentProvider
下一篇: 那些年学习注解所踩过的坑
HHcoco
博客等级 码龄13年 46粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值