在Android开发中,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈

我们之前做屏幕适配一般都会用到一下两种方式:

  1. 第一种就是宽高限定符适配,什么是宽高限定符适配呢

    ├── src/main
    │   ├── res
    │   ├── ├──values
    │   ├── ├──values-800x480
    │   ├── ├──values-860x540
    │   ├── ├──values-1024x600
    │   ├── ├──values-1024x768
    │   ├── ├──...
    │   ├── ├──values-2560x1440
  2. 就是这种,在资源文件下生成不同分辨率的资源文件,然后在布局文件中引用对应的 dimens,大家一定还有印象

  3. 第二种就是 鸿神 的AndroidAutoLayout

这两种方案都已经逐渐退出了历史的舞台,为什么想必大家都知道,不知道的建议看看拉丁吴老师的文章,现在最主流的两种屏幕适配方案,今日头条适配方案和smallestWidth限定符适配方案,下面介绍一个框架,采用的是今日头条适配方案传送门

框架使用效果

Pixel 2 XL | 1440 x 2880 | 560dpi:

  

Pixel XL | 1440 x 2560 | 560dpi:

  

Nexus 5X | 1080 x 1920 | 420dpi:

  

Nexus 4 | 768 x 1280 | 320dpi:

  

Nexus S | 480 x 800 | 240dpi:

  

使用方式

第一步: 在module的build.gradle文件下做如下依赖

implementation 'me.jessyan:autosize:0.9.5'

第二步: 在 AndroidManifest 中填写全局设计图尺寸 (单位 dp),如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 dp

<manifest>
<application>
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
</application>
</manifest>
 

经过上面两个步骤,框架就对你所有的页面进行适配了

当我们的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,我们可以对具体页面进行手动适配

Activity

  • 当某个 Activity 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数:

    public class CustomAdaptActivity extends AppCompatActivity implements CustomAdapt {
    
       @Override
    public boolean isBaseOnWidth() {
    return false;
    } @Override
    public float getSizeInDp() {
    return 667;
    }
    }
  • 当某个 Activity 想放弃适配,请实现 CancelAdapt 接口:

public class CancelAdaptActivity extends AppCompatActivity implements CancelAdapt {

}

Fragment

  • 首先开启支持 Fragment 自定义参数的功能

    AutoSizeConfig.getInstance().setCustomFragment(true);
  • 当某个 Fragment 的设计图尺寸与在 AndroidManifest 中填写的全局设计图尺寸不同时,可以实现 CustomAdapt 接口扩展适配参数:

    public class CustomAdaptFragment extends Fragment implements CustomAdapt {
    
       @Override
    public boolean isBaseOnWidth() {
    return false;
    } @Override
    public float getSizeInDp() {
    return 667;
    }
    }
  • 当某个 Fragment 想放弃适配,请实现 CancelAdapt 接口:

    public class CancelAdaptFragment extends Fragment implements CancelAdapt {
    
    }

    可以在 pt、in、mm 这三个冷门单位中,选择一个作为副单位,副单位是用于规避修改 DisplayMetrics#density 所造成的对于其他使用 dp 布局的系统控件或三方库控件的不良影响,使用副单位后可直接填写设计图上的像素尺寸,不需要再将像素转化为 dp

    AutoSizeConfig.getInstance().getUnitsManager()
    .setSupportDP(false)
    .setSupportSP(false)
    .setSupportSubunits(Subunits.MM);

ProGuard

-keep class me.jessyan.autosize.** { *; }
-keep interface me.jessyan.autosize.** { *; }

github项目地址:https://github.com/JessYanCoding/AndroidAutoSize

Android屏幕适配框架-(今日头条终极适配方案)的更多相关文章

  1. [Android] Android 手机下 仿 今日头条 新闻客户端

    利用一个月的时间,自学了 Android 开发 ,为了检验学习成果,特意 开发了这个  仿 今日头条 新闻客户端 AppNews 包括图文新闻+视频新闻+图片新闻 预览演示如下: 功能说明: 1)底部 ...

  2. Android 屏幕,语言,API版本 适配和兼容性

    Supporting Different Languages http://developer.android.com/training/basics/supporting-devices/langu ...

  3. Android屏幕适配和方案【整理】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是根据参考资料整理下,具体内容请阅读参考资料. 原型设计图 推荐1倍效果图,即采用 720 * 360 大小( 1280 *7 ...

  4. 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

    来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...

  5. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  6. Android屏幕适配全攻略(最权威的官方适配指导) (转)

    招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...

  7. (转)android屏幕适配

    声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息 原文作者: zhuangyujia 原文地址: http://my.eoe.cn/zhuangyujia/archiv ...

  8. 【转】Android屏幕适配全攻略(最权威的官方适配指导)

    原文网址:http://blog.csdn.net/jdsjlzx/article/details/45891551 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的 ...

  9. Android屏幕适配全攻略(最权威的官方适配指导)

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入 ...

随机推荐

  1. JS中的闭包(转自他处)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  2. RSA算法的C++string实现(模幂算法和欧几里得算法的使用)后附思路

    void resetNumA(string numAStr); //使用string重置numB void resetNumB(string numBStr); //将数组转换为字符串,用于输出 st ...

  3. windows程序设计 获取磁盘容量

    //磁盘分区的总容量(字节)=总簇数*每簇扇区数*每扇区字节数 //磁盘分区的空闲空间(字节)=空闲簇数*每簇扇区数*每扇区字节数 BOOL GetDiskFreeSpace( LPCTSTR lpR ...

  4. 排序之冒泡排序(bubblesort)

    package com.pailian; /* * 冒泡排序 * 比较相邻的俩位数,这样每轮比较都会出现一个最大值或最小值 * 下一轮比较就会减少一次(因为已经知道了一个最大值或最小值) * 注意根据 ...

  5. 透析SOA、RPC、SOAP、REST、ICE、ESB模型发展史

    最初的程序全是单机程序,没有网络,没有RPC,更没有RESTful.程序猿写的东西孤独运行在单机上. 那时的程序猿们语言相通,参与开发同一套系统的团队可以面对面沟通. 网络出现了.网络,也带来变乱.网 ...

  6. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165215

    2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 20165215 目录 Kali的下载及安装 网络配置 设置共享文件夹及剪切板 更新软件源 [Kali的下载及安 ...

  7. vue:vuex中mapState、mapGetters、mapActions辅助函数及Module的使用

    一.普通store中使用mapState.mapGetters辅助函数: 在src目录下建立store文件夹: ​ index.js如下: import Vue from 'vue'; import ...

  8. Easy methods to select MB Star, Extremely MB Star, MB SD C4, Mercedes BENZ C5 SD

    MB Star, Extremely MB SD Connect C4, MB SD C4, Mercedes BENZ C5 SD are usually analysis tools to get ...

  9. Gitlab定义安全变量遇到无法转义的字符——感叹号

    我在安全变量(Secret variables)中定义了一个变量,变量值中含有特殊字符感叹号 ! . 然后我在批处理中,引用了该变量,惊奇地发现,变量值中的 ! 丢失了. 我以为是Windows CM ...

  10. Java8-对map过滤

    1.对map按值过滤返回值 public class TestMapFilter { public static void main(String[] args) { Map<Integer, ...