android屏幕适配方案[整理]

资源的适配专业术语
屏幕像素密度(dpi)

1像素密度 = 像素 / 尺寸 (dpi = px / in)
android对于各种分辨率定义的密度等级
2密度无关像素(dp)
单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果,是安卓特有的长度单位。
3独立比例像素(sp)
sp,字体大小专用单位 Android开发时用此单位设置文字大小,可根据字体大小首选项进行缩放; 推荐使用12sp、14sp、18sp、22sp作为字体大小,不推荐使用奇数和小数,容易造成精度丢失,12sp以下字体太小。

资源包括:
布局layout
图片 drawable
动画 anim
颜色 color
使用别名指定尺寸 dimens
语言 em_strings
样式 style

涵盖适配的维度:不同屏幕尺寸,不同分辨率,不同的语言,不同的屏幕方向.


布局组件的适配

1.使用密度无关像素指定尺寸 dp密度无关 sp独立比例像素
2.使用相对布局
3.使用wrap_content,match_parent,weight
4.使用minWidth,minHeight,line属性
5.dimens的使用
组件的长宽我们可以通过dimens来定义,不同的屏幕尺寸可以定义不同的数值,或者是不同的语言显示我们也可以定义不同的数值,因为翻译后的长度一般都不会跟中文的一致

布局的适配

[size限定符]
[最小宽度限定符]
layout-sw600/main.xml 当最小宽度大于600dp系统会自动选择
layout/main.xml 小于则自动选择
large/sw600dp都是用于大屏幕配置(7寸)
版本低于 3.2 的平板电脑和电视会匹配 large (7 英寸或更大的平板电脑)
版本高于 3.2 的平板电脑和电视则会匹配 sw600dp

[屏幕方向限定符]
横向 land
纵向 port
定义Xml布局文件的策略
小屏幕,纵向:单面板,带徽标
小屏幕,横向:单面板,带徽标
7 英寸平板电脑,纵向:单面板,带操作栏
7 英寸平板电脑,横向:双面板,宽,带操作栏
10 英寸平板电脑,纵向:双面板,窄,带操作栏
10 英寸平板电脑,横向:双面板,宽,带操作栏
电视,横向:双面板,宽,带操作栏
给每个限定符文件夹下定义同样文件名的布局,通过activity判断是否能获取到限定符特定的元素来判断
当前activity实例是处于横向还是纵向.

[布局别名]
res/layout/main.xml 单面板布局
res/layout-large/twopanes_main.xml 多面板布局
res/layout-sw600/twopanes_main.xml 多面板布局

[布局别名技术]

 


res/values/layouts.xml
<resources>
    <item name="main_layout" type="layout">@layout/onepane_with_bar</item>
    <bool name="has_two_panes">false</bool>
</resources>

res/values-sw600dp-land/layouts.xml
<resources>
    <item name="main_layout" type="layout">@layout/twopanes</item>
    <boolean name="has_two_panes">true</bool>
</resources>
res/values-sw600dp-port/layouts.xml
<resources>
    <item name="main_layout" type="layout">@layout/onepane</item>
    <boolean name="has_two_panes">fales</bool>
</resources>
res/values-large-land/layouts.xml
<resources>
    <item name="main_layout" type="layout">@layout/twopanes</item>
    <boolean name="has_two_panes">true</bool>
</resources>
res/values-large-port/layouts.xml
<resources>
    <item name="main_layout" type="layout">@layout/twopanes_narrow</item>
    <boolean name="has_two_panes">true</bool>
</resources>

图片的适配
logo的适配

屏幕密度 对应的图片大小 图片资源目录
120dip 36px * 36px mipmap-ldpi

160dip(基准) 48px * 48px mipmap或者mipmap-mdpi

240dip(1.5倍) 72px * 72px mipmap-hdpi

320dip (2倍) 96px * 96px mipmap-xhdpi

480dip (3倍) 144px * 144px mipmap-xxhdpi

640dip (4倍) 192px * 192px mipmap-xxxhdpi

普通图片和图标

建议安装官方的密度类型进行切图即可,但一般我们只需xxhdpi或xxxhdpi的切图即可满足我们的需求;

自动拉伸位图:Nine-Patch的图片类型

支持不同屏幕大小通常情况下也意味着,你的图片资源也需要有自适应的能力。例如,一个按钮的背景图片必须能够随着按钮大小的改变而改变。
如果你想使用普通的图片来实现上述功能,你会发现这是难以实现的,因为运行时会均匀地拉伸或压缩你的图片。解决方案是使用nine-patch图片,它是一种被特殊处理过的PNG图片,你可以指定哪些区域可以拉伸而哪些区域不可以。

动画、自定义view、shape

可以使用代码进行控制和展示多种视图,如patch动画替代帧动画。

ImageView的ScaleType适配

android:scaleType=“center”
保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size时,多出来的部分被截掉。
android:scaleType=“center_inside”
以原图正常显示为目的,如果原图大小大于ImageView的size,就按照比例缩小原图的宽高,居中显示在ImageView中。如果原图size小于ImageView的size,则不做处理居中显示图片。
android:scaleType=“center_crop”
以原图填满ImageView为目的,如果原图size大于ImageView的size,则与center_inside一样,按比例缩小,居中显示在ImageView上。如果原图size小于ImageView的size,则按比例拉升原图的宽和高,填充ImageView居中显示。
android:scaleType=“matrix”
不改变原图的大小,从ImageView的左上角开始绘制,超出部分做剪切处理。
androd:scaleType=“fit_xy”
把图片按照指定的大小在ImageView中显示,拉伸显示图片,不保持原比例,填满ImageView.
android:scaleType=“fit_start”
把原图按照比例放大缩小到ImageView的高度,显示在ImageView的start(前部/上部)。
android:sacleType=“fit_center”
把原图按照比例放大缩小到ImageView的高度,显示在ImageView的center(中部/居中显示)。
android:scaleType=“fit_end”
把原图按照比例放大缩小到ImageView的高度,显示在ImageVIew的end(后部/尾部/底部)

关于接口配合 请求加载头像图片的时候,要指定像素级别

本地加载图片前判断手机分辨率或像素密度,向服务器请求对应级别图片。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值