解决 Android 设备碎片化--屏幕适配

随着支持 Android 系统的设备(手机、平板、电视、手表)的增多,设备碎片化、品牌碎片化、系统碎片化、传感器碎片化和屏幕碎片化的程度也在不断地加深。

在当时初学 Android 的时候,就初步接触了这方面的概念。当时学了六大布局:


布局 PK

当时说了绝对布局已经是被淘汰了的,就是因为它不满足屏幕适配。还有一种百分比布局,控件的位置是按百分比来控制的,在任何尺寸的手机屏幕上整体格局都是这样显示的,不会乱。


** 扩展小知识 **


** 屏幕尺寸 **:屏幕尺寸是指手机的对角线,单位是英寸, 1 英寸 = 2.54 厘米。现在常见的屏幕有 4.7(我的红米 note 2,现在很少看见手机屏幕比我小的了)、5.0、 5.5、 6.0等等。


屏幕尺寸

**上图中的 px :pixels,像素的意思,上图中手机 分辨率 为宽 1080 px,高 1920px。 px 也就是 分辨率的单位,一个像素就是一个小点,说明宽度有 1080 个像素小点 **

** 像素密度(dpi: dots per inch) **:英文直译过来就是每英寸点数。即 dpi = px / 英寸。


dpi 分类
4 英寸 hdpi
图标的各屏幕密度的对应尺寸

** dip(dp) ( Devices Independent Pixels, 设备独立像素):顾名思义,这个每一个设备独立使用的像素,在不同的设备上有不同的效果,正是用来解决屏幕适配的单位。这里我一直都不是很明白,后面想了个比喻: 它可以看成上面像素单位的一个包装,这里一像素可能等于上面几像素,也有可能等于零点几像素,这个关系由像素密度来决定,像素密度为 160 的时候, 1dip = 1px。 素密度越高,一个独立像素为多个像素 **。

这个有两个转换工具方法

public static int dip2px(Context context, float dipValue){ 
                final float scale = context.getResources().getDisplayMetrics().density; 
                return (int)(dipValue * scale + 0.5f); 
        } 
        
    public static int px2dip(Context context, float pxValue){ 
                final float scale = context.getResources().getDisplayMetrics().density; 
                return (int)(pxValue / scale + 0.5f); 
        } 

** sp (Scaled Pixels) **:缩放像素,主要用来设置字体大小, best for textSize。

** 备注:根据谷歌的推荐,像素统一使用 dp, 字体统一使用 sp **

怎么实现屏幕适配啊

一、竖屏

  • 使用 wrap_content:视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容

  • 使用 match_parent: 展开组件以匹配其父视图的尺寸

这面两个只能解决一些简单的问题。

  • weight,权重:在 LinearLayout 中使用,用于分配控件占总体的百分比。
    ** 注意 **:
    一般使用权重设置时,最好设对应宽高为 0dp, 减少测量工作。
    当控件宽高为 match_parent 时,控件设置的权重与总体成反比;
    当控件宽高为 wrap_content 时,控件设置的权重与总体成正比;
    当只有部分控件设置了权重时,先确定没设置权重控件的宽高,再按剩下部分按比例分配。

  • 谷歌推荐:像素使用 dp, 字体使用 sp

  • 提供备用位图


    备用位图
  • 使用点九图:点九图可以指定图片中部分区域拉伸,从而使图片很多场合方法而不失真。

  • 使用百分比布局:百分比布局直接支持百分比设置控件的宽高。这样在任何尺寸的屏幕上,控件大小都是一样的。

谷歌提供了相关支持包( android-support-percent-lib),记得使用前添加相关 jar 包或者依赖哦。它提供了两种布局,percentRelativeLayout 继承自 RelativeLayout;percentFrameLayout 继承自 FrameLayout。

百分比布局的相关属性:


百分比布局的相关属性

二、横竖屏或手机与平板同时适配

2.1 使用限定符

2.1.1 最小尺寸限定符 res/layout(layout-large)

单面板布局:res/layout/activity_main.xml
双面板布局:res/layout_large/activity_main.xml

2.1.2 最小宽度限定符 res/layout(layout-sw600dp)

** 但 Android 版本低于 3.2 的设备不支持此技术,原因是这些设备无法将 sw600dp 识别为尺寸限定符,因此我们仍需使用 large 限定符。 **

** 定义 **:通过指定某个最小宽度(以 dp 为单位)来设置屏幕的大小,从而决定是否双面板显示。

例如使用 sw600p 指明双面板布局尽适用最小宽度为 600dp 的屏幕,而不是适用 large 限定符。标准 7 英寸平板电脑的最小宽度为 600dp。

单面板布局:res/layout/activity_main.xml
双面板布局:res/layout-sw600dp/activity_main.xml

2.1.3 屏幕方向限定符 land port

2.2 使用布局别名 activity_main.xml(activity_main_large.xml)

** 步骤 1** :设置好相应布局


对应布局

** 步骤 2 **:设置大尺寸屏幕引用的布局


设置大尺寸屏幕应用的布局

** 步骤 3 **:设置 600dp 尺寸屏幕引用的布局


设置 600dp 尺寸屏幕引用的布局

** 说明 **:


说明
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容