IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 今日头条Android屏幕适配方案 -> 正文阅读

[移动开发]今日头条Android屏幕适配方案

屏幕适配是我们Android开发,老生常谈的问题!

面试官:看你简历上写着熟悉Android屏幕的适配,那就说一说吧

我:

image.png

1、我们为什么要适配?

Android系统是开放的,是开源的,任何用户,开发者,手机厂商,运营商都可以对Android进行定制,比如小米,华为等等,还有许许多多的工控板,用的也是Android系统,于是乎哦吼,导致了运行Android系统的设备,多种多样,既然设备多了,就保不齐它们有着不同的屏幕尺寸,和像素密度。尽管系统可通过基本的缩放和调整大小功能使界面适应不同屏幕,但Android开发者应做出进一步优化,使我们的程序在各类屏幕上更beautiful的显示出来

image.png

2、关于屏幕的几个概念

屏幕尺寸: 屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54cm

比如我的小米11Pro的尺寸

image.png

屏幕分辨率: 屏幕分辨率是指在横纵向上的像素点数,一般以纵向像素*横向像素,1920*1080 表示宽度方向有1080个像素点,高度方向有1920个像素点,整个屏幕有1920*1080个像素

单位px 1px=1像素点

屏幕像素密度(dpi): 屏幕像素密度是指每英寸上的像素点数,单位是dpi,即 dot per inch 的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨率有关系,在单一变化条件下,屏幕尺寸越小,分辨率越高,像素密度越大

密度类型代表的分辨率(px)屏幕像素密度(dpi)
低密度(ldpi)240x320120
中密度(mdpi)320x480160
高密度(hdpi)480x800240
超高密度(xhdpi)720x1280320
超超高密度(xxhdpi)1080x1920480

分辨率是宽×高

dpi=宽2+高2屏幕尺寸dpi=\frac{\sqrt{宽^2+高^2}} {屏幕尺寸}dpi=屏幕尺寸宽2+高2??

密度无关像素: density-independent pixel ,dp或者dip,就是我们Android开发时用的宽度单位,可以保证在不同屏幕像素密度的设备上显示相同的效果

dp和PX转换

px=dp?(dpi/160)px=dp*(dpi/160)px=dp?(dpi/160)

dpi就是屏幕像素密度,160这个值是谷歌官方规定的一个值,

规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px

看以上的数据资料,我们发现,再开发过程中我们去使用dp的话,Android根据屏幕像素密度去适配了,但是为什么我们写出来的页面还是效果不理想呢!

3、今日头条适配方案

那是因为我们UI在给我们图的时候屏幕宽度是一个固定值,但是由于Android手机的屏幕的多样性,屏幕像素换成dp之后,长度也是多样性的,所以我们按照UI的尺寸出完效果,效果所以不太理想,为了解决这个问题,我们来更改一下几个参数值,来达到,我们按照UI给的设计图尺寸来编写代码,在其他Android设备上达到一个百分比适配!

以360dp为宽度的设计稿为例子 density的值就是dpi/160

public static void setCustomDensity
    (Activity activity,final Application application){
    final DisplayMetrics appDisplayMetrics
        =application.getResource().getDisplayMetrics();
        
    final float targetDensity=appDisplayMetrics.widthPixels/360;
    final int targetDensityDpi=(int)(160*targetDensity);
    appDisplayMetrics.density=targetDensity;
    appDisplayMetrics.densityDpi=targetDensity;
    //Activty 的DisplayMetrics也要设置
    final DisplayMetrics activityDisplayMetrics
        =activity.getResource().getDisplayMetrics();
         activityDisplayMetrics.density=targetDensity;
    activityDisplayMetrics.densityDpi=targetDensity;
    
}
复制代码

这样就能按百分比适配了,屏幕宽度像素/设计稿尺寸 能把1dp=多少像素值算出来,也就是density的值,这个值算出来之后,就能算出来360dp的dpi,设置完之后,再按设计稿的尺寸来,就能做到和设计稿百分比适配了

image.png

这个就是适配的核心方案,感觉适配大部分设备效果还是很好的!

鸿洋大佬推荐的库autoSize也是使用的这种方案!

更多Android进阶资料扫码即可领取

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:12:28  更:2021-09-27 14:12:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:45:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码