千家信息网

Android屏幕适配怎么分析

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,Android屏幕适配怎么分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。为什么要屏幕适配?碎片化品牌机型碎片化屏幕尺
千家信息网最后更新 2026年11月04日Android屏幕适配怎么分析

Android屏幕适配怎么分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

为什么要屏幕适配?

碎片化

  • 品牌机型碎片化

  • 屏幕尺寸碎片化

  • 操作系统碎片化

为了保证用户获得一致的用户体验效果,使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果,则需要我们进行屏幕适配。

基础概念

屏幕尺寸

屏幕尺寸是指屏幕对角线的长度,单位是英寸,1 inch=2.54 cm

屏幕分辨率

手机在横向和纵向上的像素点数总和,单位是像素(pixel),1px = 1像素点,举个栗子,1080x1920,即宽度方向上有1080个像素点,在高度方向上有1920个像素点。

屏幕像素密度

每英寸像素点个数,单位是dpi,dots per inch。为简便起见,Android 将所有屏幕密度分组为六种通用密度: 低、中、高、超高、超超高和超超超高。

  • ldpi(低)~120dpi

  • mdpi(中)~160dpi

  • hdpi(高)~240dpi

  • xhdpi(超高)~320dpi

  • xxhdpi(超超高)~480dpi

  • xxxhdpi(超超超高)~640dpi

dpi_example

屏幕密度无关像素dp(dip)

Density Independent Pixels,即密度无关像素。

  • 160dpi, 1dp = 1px

  • 240dpi, 1dp = 1.5px

  • 320dpi, 1dp = 2px

  • 480dpi, 1dp = 3px

  • 640dpi, 1dp = 4px

  • 使用px在低、中、高屏幕密度下的效果

density-test-bad

  • 使用dp在低、中、高屏幕密度下的效果

dimen_example2

独立比例像素sp

Scale Independent Pixels, 即sp或sip。

Android开发时用此单位设置文字大小,可根据字体大小***项进行缩放,推荐使用12sp、14sp、18sp、22sp作为字体设置的大小,不推荐使用奇数和小数,容易造成精度的丢失问题,小于12sp的字体会太小导致用户看不清。

屏幕适配之图片适配

在设计图标时,对于5种主流的像素密度(mdpi,hdpi,xhdpi,xxhdpi和xxxdpi)应按照2:3:4:6:8的比例进行缩放。例如一个启动图片ic_launcher.png,它在各个像素密度文件夹下大小为:

  • ldpi(低)

  • mdpi(中)48*48

  • hdpi(高)72*72

  • xhdpi(超高)96*96

  • xxhdpi(超超高)144*144

  • xxxhdpi(超超超高)192*192

存在的问题

  • 每套分辨率出一套图,为美工或者设计增加了许多工作量

  • 对Android工程文件的apk包变的很大

解决方法

Android SDK加载图片流程

  • Android SDK会根据屏幕密度自动选择对应的资源文件进行渲染加载,比如说,SDK检测到你手机的分辨率是xhdpi,会优先到xhdpi文件夹下找对应的图片资源;

  • 如果xhdpi文件夹下没有图片资源,那么就会去分辨率高的文件夹下查找,比如xxhdpi,直到找到同名图片资源,将它按比例缩小成xhpi图片;

  • 如果往上查找图片还是没有找到,那么就会往低分辨率的文件夹查找,比如hdpi,直到找到同名图片资源,将它按比例放大成xhpi图片。

根据加载图片的流程,可以得出理论上提供一套图片就可以了。

那么应该提供哪种分辨率规格呢?

原则上越高越好,同时结合当前主流分辨率屏幕

自动拉伸图片

ninepatch_raw

ninepatch_examples

屏幕适配之布局适配

布局参数

使用wrap_content, match_parent, layout_weight。

weight的使用

weight_examples

  • 当layout_width为0dp,layout_weight分别是1和2

        

当layout_width为match_parent,layout_weight分别为1和2

        

weight的计算

宽度 = 原来宽度 + 权重比值 * 剩余宽度

  • 当layout_width为0dp,layout_weight分别是1和2

***个按钮:宽度 = 0 + 1/3 * 屏宽 = 1/3屏宽

第二个按钮:宽度 = 0 + 2/3 * 屏宽 = 2/3屏宽

  • 当layout_width为match_parent, layout_weight分别是1和2

***个按钮:宽度 = 屏宽 + 1/3 (屏宽 - 2 屏宽) = 2/3屏宽

第二个按钮:宽度 = 屏宽 + 2/3 (屏宽 - 2 屏宽) = 1/3屏宽

布局使用

使用相对布局,禁用绝对布局。

限定符

尺寸限定符

  • 在手机较小的屏幕上,加载layout文件夹布局

  • 在平板电脑和电视的屏幕(>7英寸)上, 加载layout-large文件夹的布局

  • Android3.2版本之前

最小宽度限定符

  • 在手机较小的屏幕上,加载layout文件夹布局

  • 标准7英寸平板(其最小宽度为 600 dp),加载layout-sw600dp文件夹的布局

  • 在Android3.2版本及之后版本

布局别名

  • 适配手机的单面板(默认)布局:res/layout/activity_main.xml

  • 适配尺寸>7寸平板的双面板布局(Android 3.2前):res/layout-large/activity_main.xml

  • 适配尺寸>7寸平板的双面板布局(Android 3.2后):res/layout-sw600dp/activity_main.xml

***的两个文件的xml内容是完全相同的,这会带来:文件名的重复从而带来一些列后期维护的问题,修改一个文件,可能忘记修改另外一个。于是为了要解决这种重复问题,我们引入了布局别名。

  • 适配手机的单面板(默认)布局:res/layout/activity_main.xml

  • 适配尺寸>7寸平板的双面板布局:res/layout/activity_twopanes.xml

  • resalues/layout.xml

        @layout/activity_main  
  • resalues-large/layout.xml

          @layout/activity_twopanes   
  • resalues-sw600dp/layout.xml

          @layout/activity_twopanes   
  • setContentView(R.layout.main);

屏幕方向限定符

  • res/layout-land

  • res/layout-port

  • res/layout-sw600dp-land

  • res/layout-sw600dp-port

屏幕适配之dimen适配

  • Nexus 4 (4.7英寸 768x1280:xhdpi)

Nexus S (4英寸 480x800:hdpi)

dimen_example2

即使使用dp,依然不能解决屏幕分辨率的适配问题,我们可以针对不同的屏幕创建不同的dimen值。

  • resalues/dimens.xml

  180dp  160dp  
  • resalues-480x800/dimens.xml

       113dp       100dp   

屏幕适配之百分比布局

  • 官方文档

  • Github Sample

           

屏幕适配之自适应用户界面

newsreader_land

newsreader_port

当NewsReader在横屏时是双面板,左侧是HeadLinesFragment, 右侧是ArticleFragment, 点击新闻标题, 切换ArticleFragment的内容。当NewsReader在竖屏时是单面板,只有个HeadLinesFragment, 点击新闻标题,跳转到ArticleActivity去显示新闻内容。所以,要实现这样的横竖屏适配,只是通过布局是完成不了的,不同业务逻辑的处理,还需要写代码来完成,这就是我们的自适应用户界面。

使用布局别名

  • resalues/layouts.xml

  @layout/onepane_with_bar  false  
  • resalues-sw600dp-land/layouts.xml

  @layout/twopanes  true  
  • resalues-sw600dp-port/layouts.xml

      @layout/onepane      false  

判断是单面板还是双面板

View articleView = findViewById(R.id.article); mIsDualPane = articleView != null && articleView.getVisibility() == View.VISIBLE;//如果能够找到ArticleFragment则是双面板

单双面板的不同业务逻辑

public void onHeadlineSelected(int index) {     mArtIndex = index;    if (mIsDualPane) {          // display it on the article fragment         mArticleFragment.displayArticle(mCurrentCat.getArticle(index));     }    else {          // use separate activity         Intent i = new Intent(this, ArticleActivity.class);         i.putExtra("catIndex", mCatIndex);         i.putExtra("artIndex", index);         startActivity(i);     } }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

屏幕 布局 适配 文件 图片 像素 宽度 密度 分辨率 文件夹 超高 尺寸 手机 面板 不同 平板 用户 资源 问题 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技金融是不是互联网金融 互联网科技财经 互联网科技深圳 苏州互联网科技贷款公司 北京禾田雨橡互联网科技 卓越科技互联网 招聘 博兴的互联网电子科技公司 汽车互联网创新科技园 互联网科技有哪些公司 电子科技大学互联网创业大赛 科技互联网海报 国大互联网教育科技有限公司薪资 美国互联网科技实力 上海科技产业互联网平台 中国互联网有什么科技 米泉互联网科技专业怎么样 互联网的科技体现在哪里 三亚科技创新互联网基地 上海旺乐尼互联网科技有限公司 互联网科技创业有什么好项目 重庆互联网络科技 四川狮子座互联网科技 上海亿帐通互联网科技 汉立互联网科技有限公司联系电话 洛阳昕诺飞互联网科技有限公司 爱医互联网络科技 广东工业互联网大赛深圳学泰科技 上海互联网科技公司ppt 科技和互联网行业的特点 互联网科技博主张洲
0