android字节跳动屏幕适配,Android屏幕适配-第三篇(今日头条适配方案)

今天记录的笔记是今日头条的适配方案原理以及开源库”AndroidAutoSize“的实现剖析!(备注:此文仅供自己参考,全文全是文字,如果读者读起来比较生涩难懂,建议阅读引入文章)

此篇文章是通过阅读《骚年你的屏幕适配方式该升级了!-今日头条适配方案》理解的整理。感谢作者JessYan

适配的前提是你需要知道安卓适配的基础知识和基本方法 《Android屏幕适配-第一篇(基础知识)》、《Android屏幕适配-第二篇(你要知道的适配基本操作)》

你需要知道的关键字:density、dip、px、dp(dpi)

今日头条适配原理:density=(当前屏幕分辨率宽或高(单位px))/(ui设计稿宽或高(单位dp))

这个表示的是1dp在当前分辨率下的所对于的像素

真正的view大小: realWidth=(ui设计稿上的宽度)*density

如何使用,例子:如设置一个view大小为100dpx100dp,通过上面的公式可得到宽为100*density高为100*density

假设当前分辨率为720x1280,设计搞的尺寸为360x640,当前density=2

假设当前分辨率为480x800,设计搞的尺寸为360x640,当前density=1.333

分辨率为720x1280下 view宽度=100*2 px,占整体宽度的比例为0.278(约等于)

分辨率为480x800下 view宽度=100*1.33 px,占整体宽度的比例为0.278(约等于)

比例近乎相同

AndroidAutoSize分析

设置设计稿 宽或高

初始化配置,通过启动一个ContenProvider来启动默认配置

/**

* ================================================

* 通过声明 {@link ContentProvider} 自动完成初始化

* Created by JessYan on 2018/8/19 11:55

* Contact me

* Follow me

* ================================================

*/

public class InitProvider extends ContentProvider {

@Override

public boolean onCreate() {

AutoSizeConfig.getInstance()

.setLog(true)

.init((Application) getContext().getApplicationContext())

.setUseDeviceSize(false);

return true;

}

//其他代码忽略...

}

然后会调用此方法

AutoSizeConfig init(final Application application, boolean isBaseOnWidth, AutoAdaptStrategy strategy) {

Preconditions.checkArgument(mInitDensity == -1, "AutoSizeConfig#init() can only be called once");

Preconditions.checkNotNull(application, "application == null");

this.mApplication = application;

this.isBaseOnWidth = isBaseOnWidth;

final DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();

getMetaData(application);

isVertical = application.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;

int[] screenSize = ScreenUtils.getScreenSize(application);

mScreenWidth = screenSize[0];

mScreenHeight = screenSize[1];

mStatusBarHeight = ScreenUtils.getStatusBarHeight();

LogUtils.d("designWidthInDp = " + mDesignWidthInDp + ", designHeightInDp = " + mDesignHeightInDp + ", screenWidth = " + mScreenWidth + ", screenHeight = " + mScreenHeight);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值