Android屏幕适配

小公司3年,Andriod屏幕适配还停留在的初级阶段。
最近看了下慕课网的Android屏幕适配,真是醍醐灌顶。
而此视屏详尽的笔记资料凯子哥(赵凯强)早已流芳——Android屏幕适配全攻略(最权威的官方适配指导)
鸿洋_Android 屏幕适配方案中不同分辨率别名文件生成器

建议大家直接看上面凯子哥的Android屏幕适配攻略。下面是我自己简略的笔记:

一、核心概念与单位详解

屏幕尺寸、屏幕分辨率、屏幕像素密度?
dp dip dpi sp px之间的关系?

  1. dpi(像素密度):是指每英寸上的像素点数,dpi即”dot per inch”的缩写,屏幕像素密度与屏幕尺寸和屏幕分辨率有关
  2. px:构成图像的最小单位
  3. dp dip:Density Independent Pixels的缩写,即密度无关像素;
    以160dpi为基准->1dip = 1px , 240dpi 中 1dip = 1.5px;
    实践经验,屏幕的宽度为320dp-480dp居多。
  4. sp :即Scale-Independent Pixels
    可以根据文字大小首选项进行放缩
    谷歌推荐:12sp 14sp 18sp 22sp
    不要设置为奇数,有可能造成精度丢失

综上:仅仅使用dp无法完成所有屏幕的适配,如果根据320dp为宽设置,会造成大屏高分辨率手机有空白区域,反之小屏低分辨率显示不全。
解决:需要根据不同的分辨率设置统一的dp别名,例如:values-1024x600(上面鸿洋大神的文章有快速生成工具)(单位为px,是根据宽高320份以及680份进行等分),注意:需要values设置默认值(单位为dp)。这种做法仍然会丢失部分奇葩分辨率的手机,工作量大且有疏忽,只能慢慢补充。

mdpi hdpi xdpi xxdpi 如何计算和区分?

图片文件dp范围
mdpi120dpi - 160dpi
hdpi160dpi-240dpi
xhdpi240dpi-320dpi
xxhdpi320dpi-480dpi
xxxhdpi480dpi-640dpi

在设计图标时,对于五种主流的像素密度mdpi hdpi xhdpi xxhdpi xxxhdpi >> 根据2:3:4:6:8比例进行缩放

二、解决方案:

支持各种屏幕尺寸
支持各种屏幕密度
实施自适应用户界面流程

支持各种屏幕尺寸:

  1. 使用wrap_content match_parent weight
  2. 使用相对布局,禁用绝对布局
  3. 使用限定符
  4. 使用自动拉伸位符

weight:计算出的宽度=原来宽度+剩余控件所占百分比宽度

// Weight计算伪代码
Button1 0dp weight = 1
Button2 0dp weight = 2
button1宽度:0 + L * 1/3 = 1/3L
button2宽度:0 + L * 2/3 = 2/3L

Button1 match_parent weight = 1
Button2 match_parent weight = 2
button1宽度:L + (L - 2L) * 1/3 = 2/3L
button2宽度:L + (L - 2L) * 2/3 = 1/3L

布局包名别名、最小宽度限定符

包名含义
layout手机布局
layout-large平板布局(3.2之前)
layout-sw600dp最小宽度限定符(3.2之后)(values-sw600dp : Smallest dimension is 600 dp or higher >> 最小宽度,如果相对较小的一遍在600dp及以上就认为是平板设备)(同理可以设置为sw720dp)
values-sw600dp-land水平方向
values-sw600dp-port竖直方向

布局抽取共用(大小屏手机上使用不同的布局)

res/layout/main.xml 单面板布局
res/layout/main_twopanes.xml 多面板布局
res/values/layout.xml
布局别名:

<resources>
    <item name="main" type="layout">@layout/main</item>
</resources>

Android3.2之前的平板布局
res/values-large/layout.xml

<resources>
    <item name="main" type = "layout">@layout/main_twopanes</item>
</resources>

Android3.2之后的平板布局
res/values-sw600dp/layout.xml

<resources>
    <item name="main" type="layout">@layout/main_twopanes</item>
</resources>

此时setContentView(R.layout.main);main应为布局别名

// bool值可以进行数据设置,用来做判断处理
<resources>
    <item name="main_layout" type="laytout">@layout/twopanes</item>
    <bool name="has_two_panes">true</bool>
</resources>

使用自动拉伸位图(.9图)

.9图
Android Studio自带工具
Eclipse需要借助工具
.9图的空白区域(未拉伸部分),控件为自动为其设置padding属性

图片放在对应的文件夹

默认: 3.86M
drawable-xxhdpi : 11.65M
drawable:74.97M 放大了
drawable-mhdpi:74.95M 放大了
drawable-hdpi:35.38M
尽可能多的切图(可以只一套图放在正确的文件夹里面)(可以缩放,稍高)

谷歌Demo: com.demo.android.newsreader(最佳实践)

实施自适应用户界面流程
1.确定当前布局
2.根据当前布局做出响应
3.重复使用其它活动中的片段
4.处理屏幕配置变化

代码动态设置:

showAtLocation(View parent,int x ,int y)
根据屏幕宽高动态设置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值