Android屏幕适配之路

转载请注明出处 http://blog.csdn.net/u011453163/article/details/51501896

对于Android开发人员来说,屏幕适配绝对是一个痛点。不比ios仅仅就那么屈指可数的屏幕,而且比例还是相对统一,除了4和4s,从5到6p屏幕宽高比都是接近9:16的,但是由于android的开源,导致了大量的屏幕规格出现在市场上,作为Android应用,不能仅仅只适配某一款机型或者是某一种尺寸的屏幕,也没精力去为那么多的屏幕开发对应的应用,所以,屏幕适配一直都是一个话题,网上也有很多人对这一块做了很多技术分享。
总结了网上一些大牛的技术博客和我自己的一些看法。
目前我所知道的适配方法有以下几种,如果我更好的想法欢迎补充

  1. 使用weight(权重)
  2. 屏幕分割法
  3. 使用官方出品 百分比库
  4. 代码动态适配

下面来分析下这些思想
先梳理一下屏幕适配的关键,屏幕适配即使等比例的缩放内容,包括布局,文字,图片等内容,即是等比例缩放,所以在布局里写死一个直显然很难适应所有的尺寸屏幕。这里要分享的这些思想都是通过百分比来适配的。

1适应weight(权重)
对于weight相信作为android开发人员来说并不陌生,是LinearLayout的属性,也是通过百分比分配的。但是对于一个复杂的布局仅仅是用LinearLayout是远远不够的。

2 屏幕分割法
通过创建多个资源文件 value-xxx 来达到适配的目的,这里的屏幕分割是以一个基准屏幕尺寸,将宽高 分别分割成相应的份数
例如:一个720*1280的屏幕,将宽度分成720份每份即1px,高度分成1280份每份即1px,以此作为基准,将其他的尺寸屏幕也分别把宽度分割曾720份,高度分割成1280份。例如 360*640的屏幕 即每份为0.5px。通过这样的方法可以达到适配的目的。但是有明显的缺陷,对于应用只需适配少量屏幕的此法确实不错,并且对于华为等自带菜单栏的要去掉菜单栏高度才能适配。

3 使用官方出品 百分比库
这是官方出品的一支持百分比属性的库,但是只有两个布局,PercentRelativeLayout,PercentFrameLayout。通过增加一些自定义属性达到一个百分比适配的效果,以下是支持的属性,但是以及足够了,加上本身就具备weight(权重)的LinearLayout,有了这三个布局已经能完成我们日常界面搭建了。
layout_widthPercent、
layout_heightPercent、
layout_marginPercent、
layout_marginLeftPercent、
layout_marginTopPercent、
layout_marginRightPercent、
layout_marginBottomPercent、
layout_marginStartPercent、
layout_marginEndPercent。

4代码动态适配
这里的代码动态适配顾名思义就是在代码里动态适配,这里的代码适配的方案是基于第二中屏幕分割的思想达成的,并且这里不需要创建多个资源文件夹去适配不同的尺寸的屏幕。

关于第4点的用法
1.首先定制一个基准 这里是以720*1280为基准的

public float px(Activity activity, int oldPx){
        float newPx=oldPx*activity.getWindowManager().getDefaultDisplay().getWidth()/(float)720;
        return newPx;
    }

2.使用的时候可以让UI标记一份同等比例的效果图,这样不用自己在去测量像素大小

 tv.getLayoutParams().width=(int)px(getActivity(), 360);

360像素的宽度在720的屏幕是刚好一半的,这里我使用了分辨率成倍的两个屏幕 接下来看看效果
这里写图片描述

效果:
这里写图片描述

都是屏幕的一半

对于字体也是同样适配的。

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX,px(getActivity(), 30));

但是字体 我们要使用px为单位的。然后看看效果
这里写图片描述

这就是第4点适配的使用方式,效果也是很显著的。

当然这里主要介绍下第四种的用法
关于 2,3点可以参考鸿洋大神的博客
android屏幕适配方案
http://blog.csdn.net/lmj623565791/article/details/45460089
Android 百分比布局库(percent-support-lib) 解析与扩展
http://blog.csdn.net/lmj623565791/article/details/46695347

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值