Android屏幕适配方案

本文探讨了Android屏幕适配的两种主流方案:今日头条适配方案和smallest width限定符适配方案。今日头条的方案通过动态调整density实现,而smallest width方案利用Android系统的资源选择机制,提供更好的容错性和效率。这两种方法各有优劣,适用于不同的场景。
摘要由CSDN通过智能技术生成

目前比较流行的屏幕适配方案是今日头条适配方案和smallest width限定符适配方案
首先来说一下今日头条的屏幕适配方案:

简介:我们写UI界面的时候,都是使用dp作为单位,UI给出的设计图也是以dp为单位,比如UI给的图是宽x高为360x640dp的。那么我们为了达到在所有手机上都能不变形的展示UI图,那么我们所有的手机都要是宽x高 = 360 x 640dp,很显然,实际情况不是这样的,因为dp = px / density; px就是手机的像素,不同手机的像素不一样,不如有1080 x 1920 和 720 X 1280 像素的手机。density = dpi / 160; dpi是这样生成的

那么我们就可以知道,不同手机宽度和高度上的dp值是不相同的。

那么我们目前要做的事情就是根据手机实际的像素,算出density,使宽度上的 dp = px / density = 360 高度上的dp = px / density = 640; 因为每个手机像素都是固定的,所以就可以改变density的值就可以了。

因为 density = dpi / 160; 所以改变density就是改变dpi就可以了。

在说明一下,因为每个手机在宽和高上的像素比例不一样,所以无法做到在宽度和高度上完全的适配,如果我们的这个界面能在上下方向上滑动,就在宽度上适配就好了,如果我们的界面在高度上无法滑动,宽度上就尽量使用match_parent, wrap_content, 权重,就好了,意思就是没有完美无缺的适配方式。

那么我们下面的重点就是求出dpi,因为dpi = 160 * (px / dp);
就像我们上面所说的:手机的像素是确定的,即px是确定的,dp就是我们要适配成的dp值,也是确定的,比如宽度上是360,那么我们就可以算出,dpi值,算出之后就可以动态改变这个值,使我们所有的适配的手机的宽度上的dp值是360,或高度上是640。

今日头条的适配方案原理就是这样的,下面我们看看实现方法:

通过阅读源码,我们得知,density是DisplayMetrics中的成员变量,而DisplayMetrics实例通过Resource#getDisplayMetrics可以获得,而Resource通过Activity或者Application的Context获得

先来熟悉一下DisplayMetrics中和适配相关的几个变量:
DisplayMetrics#density就是上述的density

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值