安卓屏幕适配(2015终极版)

安卓屏幕适配方案(2015终极版)

  1. 安卓屏幕适配的重要性不用多说,OpenSignalMaps发布安卓碎片化报告指明到2014年,支持Android的设备共有18796种。安卓和ios不同,ios的设备只有几种,安卓设备太多,屏幕的分辨率也多,你不可能在app中定义所有的layout分辨率文件,这样会导致app过大,博主参考了10篇以上的博客,最后结合自己的经验来写这篇博客, 不足之处希望大家多多批评
  2. 首先介绍一下常见的屏幕分辨率,博主接触的手机不多,所以接下来使用三种分辨率进行测试
    1.480x800
    2.800x1280
    3.1280x720
    这个博客可以帮助很好的理解一些基本概念
  3. 安卓屏幕适配的黄金原则:
    1.声明最小支持分辨率:这是谷歌官方的建议,因为在各个微博里面只有一个微博提到了这个,实用性可能不是很高,所以我没有进行实际测试
    2.在layout文件中设置空间尺寸应该采用fillparent,matchparent和wrapparent,dp和sp
    3.不使用绝对布局,尽量使用相对布局,
    4.对不同的屏幕提供合适大小的图片
  4. 使用9-patch图片:由于博主不是很了解这个部分,所以大家可以参考一下这两个博客
    参考使用自动拉伸位图部分
  5. 彻底解决的方法:这个部分特别多,大家参考一下这个博客的部分
    具体如何来实现呢?我们看下面的代码:
  6. 简化版的方法:彻底解决的方法很好,但是如果区分平板或者横竖屏可能存在不足,所以这里介绍一下我最喜欢用的方法:线性布局。上面的方法采用的方法本质上就是自定义分辨率,每个dp的内容,但是一般情况下我们可能根本用不到这么多的内容,也不需要如此详细的划分,例如QQ的底部菜单栏,三个按钮,简单使用线性布局进行比重weight的设置,就可以保证适配,看下面这段代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText android:id="@+id/EditText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"/>
    <EditText android:id="@+id/EditText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/EditText1"/>
    <ImageView android:id="@+id/im"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginTop="10dp"
        android:layout_centerHorizontal="true"
        android:src="@drawable/th_sod"
        />
    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >

        <Button
            android:id="@+id/button1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="消息" 
            android:gravity="center"
            android:drawableTop="@drawable/th_sod"/>

        <Button
            android:id="@+id/button2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="好友" 
            android:gravity="center"
            android:drawableTop="@drawable/th_sod"/>

        <Button
            android:id="@+id/button3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="contact" 
            android:gravity="center"
            android:drawableTop="@drawable/th_sod"/>
    </LinearLayout>

</RelativeLayout>

下面是三种分辨率下的显示效果
这里写图片描述
这里写图片描述
这里写图片描述
之前有定义过一个登陆按钮,结果导致在1280x800的情况下出现了按钮个底部菜单重叠的问题,所以删掉了,现在说一下这种方法可能出现的问题:
1.图像可能会出现问题,里面的imageview我定义的是正方形,所以看起来还好,如果是一个长方形可能就比较奇怪,所以圆形的图像是非常好用的,为什么头像用的全是圆形
2.排版可能出现问题,之前有在密码框下面定义login按钮,设置了margintop结果按钮在平板模式下,login的按钮和底部菜单重叠
3.文字位置的问题,注意底部按钮的gravity属性,不要因为被拉伸导致文字偏左偏右的不协调感。
这个方法目前没有发现什么特别重大的问题,觉得唯一可能出现的问题就是在图片,不同分辨率的图片被拉伸之类的问题,可以参考这篇博客反汇编得到的qq,微信之类的布局(找不到这篇博客了,用文本列出来吧 ==)由于没有各种清晰度的图片,所以我也没有办法测试下去。
由于时间紧张我也没有进行帧布局的测试,希望感兴趣的可以测试一下,推想问题应该不大。还有一个就是黄金比例的测试。
谢谢大家观看这个帖子,如有不足请多多指教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值