安卓框架搭建(九)UI适配适配方案

前言:

UI适配在安卓开发中一直是一个很头疼的问题,由于安卓手机品牌型号的众多,目前又新出了一个刘海屏,就导致适配问题很难完全兼顾

方案:

目前来说适配方案有代码适配 ,  布局适配

1.dp 直接适配

dp适配虽然可以兼顾大部分手机,但有些特殊的屏幕,不是标准的比例,显示出来的结果就会有所差异

2.利用鸿阳的 AutoLayout全新的适配方式 堪称适配终结者 

如果想了解更详细的内容可以去鸿阳的博客中查看,用法也很简单

这样的设计图开发中很常见吧,有些公司可能需要自己去测量。

布局直接抄设计图上的尺寸

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="86px"
android:layout_marginTop="26px"
android:background="#ffffffff">

<ImageView
    android:id="@+id/id_tv_add"
    android:layout_width="34px"
    android:layout_height="34px"
    android:layout_gravity="center_vertical"
    android:layout_marginLeft="276px"
    android:layout_marginTop="26px"
    android:src="@mipmap/add"
    />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="26px"
    android:layout_toRightOf="@id/id_tv_add"
    android:text="新增旅客"
    android:textColor="#1fb6c4"
    android:textSize="32px"
    />
</RelativeLayout>

Item的布局文件,就是这么写:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="108px"
    android:layout_marginTop="26px"
    android:background="#ffffffff"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="22px"
        android:layout_marginTop="16px"
        android:text="王大炮 WANG.DAPAO"
        android:textColor="#333"
        android:textSize="28px"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="16px"
        android:layout_marginLeft="22px"
        android:text="护照:G50786449"
        android:textColor="#999"
        android:textSize="26px"
        />

</RelativeLayout>

不同分辨率下的效果:

768*1280,Andriod 4.4.4

480*800,Android 2.3.7

3.宽高限定符适配 

就是在项目中针对你所需要适配的手机屏幕的分辨率各自建立一个文件夹。更多详细内容请移步鸿阳 Android 屏幕适配方案

如下图:

然后我们根据一个基准,为基准的意思就是:

比如480*320的分辨率为基准

  • 宽度为320,将任何分辨率的宽度分为320份,取值为x1-x320
  • 高度为480,将任何分辨率的高度分为480份,取值为y1-y480

例如对于800*480的宽度480:

生成代码的工具类鸿阳大神也已经为我们提供 ,非常方便  移步至 工具类下载地址

4.今日头条适配方案

此方法是利用代码去适配,在每个activity中调用封装好的方法即可,通过计算出屏幕的真实密度来重新转换 (DisplayMetrics 中和 dp 转换相关的变量)。

代码如下 , 如果想了解更加详细的介绍  请移步至今日头条适配方案

5.smallestWidth适配

这种和宽高限定符适配原理上是一样的,都是系统通过特定的规则来选择对应的文件。只不过此种方法比宽高限定符有着更好的容错机制,比如说 宽高限定符中如果没有当前手机的屏幕的文件夹 ,那么就去找默认的文件夹,然而此时就又回到了原点 , 而smallestWidth 在没有找到相对应的文件的时候 , 系统会向下寻找,比如离360dp最近的只有value-sw350dp,那么Android就会选择value-sw350dp文件夹下面的资源文件 ,这样适配的后的 差距 就不会那么大

第一种后缀:sw<N>dp,如layout-sw600dp, values-sw600dp
这里的sw代表smallwidth的意思,当你所有屏幕的最小宽度都大于600dp时,屏幕就会自动到带sw600dp后缀的资源文件里去寻找相关资源文件,这里的最小宽度是指屏幕宽高的较小值,每个屏幕都是固定的,不会随着屏幕横向纵向改变而改变。

第二种后缀w<N>dp 如layout-w600dp, values-w600dp
带这样后缀的资源文件的资源文件制定了屏幕宽度的大于Ndp的情况下使用该资源文件,但它和sw<N>dp不同的是,当屏幕横向纵向切换时,屏幕的宽度是变化的,以变化后的宽度来与N相比,看是否使用此资源文件下的资源。

第三种后缀h<N>dp 如layout-h600dp, values-h600dp
这个后缀的使用方式和w<N>dp一样,随着屏幕横纵向的变化,屏幕高度也会变化,根据变化后的高度值来判断是否使用h<N>dp ,但这种方式很少使用,因为屏幕在纵向上通常能够滚动导致长度变化,不像宽度那样基本固定,因为这个方法灵活性不是很好,google官方文档建议尽量少使用这种方式。

以下是可以使用的通用屏幕尺寸的一些值:
1.320,针对以下屏幕配置的设备:
240x320ldpi(QVGA手持设备)
320x480mdpi(手持设备)
480x800hdpi(高分辨率手持设备)
2.480,针对480x800mdpi的屏幕(平板或手持设备)
3.600,针对600x1024mdip的屏幕(7英寸平板)
4.720,针对720x1280mdip的屏幕(10英寸平板)

那么肯能有些人就要问怎么才能生成这些文件呢, 作者也给我们提供了一个方便快捷的工具类 , 注意是 java项目

工具类地址

使用方法:

运行该Java工程,会在本地根目录下生成相应的文件,如果需要生成更多尺寸,在DimenTypes 文件中填写你需要的尺寸即可。

推荐的尺寸为 : 300,320,360,411,450,这几个尺寸是比较必要的,然后在其中插入一些其他的尺寸即可,如果不放心,可以在300-450之间,以10为步长生成十几个文件。

你也可以直接引用架构中生成好的文件 直接复制到你的项目中即可

以上就是,安卓框架搭建(九)UI适配适配方案,的全部内容 , 

如有不了解的 可以去github下载源码 本章节内容为分支9

github源码地址,本章节见dev9分支

或 加入安卓开发交流群:安卓帮595856941

相关链接:

下一篇:

猜你喜欢

转载自blog.csdn.net/q9104422999/article/details/81773159
今日推荐