您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > Android

你真的了解android的屏幕适配吗?

时间:2019-07-08 12:08:52  来源:  作者:

前言

UI适配,一直都是开发过程中极其恶心的问题。不过一旦吃透适配的原理,这块“食之无味,弃之可惜”的鸡肋问题就可以迎刃而解。比如前段时间,头条的解决方案...因为不让随意贴外链,这里就不贴了,不贴也没啥问题,很容易百度...

时间过了这么久,为啥单独搞了一篇关于UI适配的文章了?一是因为最近工作需求;二是在适配的过程中学到了一些其他布局的用法,所以算是一篇近期工作总结性质的文章。

OK,开整。

一、为什么需要适配

我们都知道由于Android手机分辨率碎片化及其严重,即使google推出了dp效果也同样不尽如人意。那么咱们先来明确第一个问题:为什么dp效果并不好。

提到dp,咱们不得不提到几个公式:

  • px = density * dp;
  • density = dpi / 160;
  • px = dp * (dpi / 160);

我们可以看到,dp和px之间的转换和dpi有着密不可分的关系。那么它又是怎么算出来的呢?上一张图:

你真的了解android的屏幕适配吗?

 

说白了,dpi就是手机斜边除以屏幕尺寸

从上述的公式,我们可以看出,dpi的本质和手机屏幕的物理宽高有着直接的关系。

接下来我们看俩款手机:

1、屏幕分辨率:1920*1080,屏幕尺寸:5吋的话,那么dpi约为440。

那么这种情况下1dp=2.75px。

2、屏幕分辨率:1920*1080,屏幕尺寸:6吋的话,那么dpi约为367。

那么这种情况下1dp=2.3px。

因此我们可以看出来,对于不同的手机来说,如果它们的分辨率相同,但屏幕尺寸不同。那么即使dp相同,真正到手机上去展示时仍然会出现问题。

因此我们就需要进行适配…

二、百分比布局(ConstraintLayout)

最初为了适配,各种以百分比为核心的适配思想层出不穷。百分比布局的出现就是其中之一。这次咱们通过ConstraintLayout来聊一聊百分比。

ConstraintLayout,可以通过各种约束关系将复杂的布局简单化,极大的降低layout的层级关系(减少UI绘制所带来的时间消耗)。

ConstraintLayout同样拥有极强的百分比布局能力。

比如:

  • layout_constraintHorizontal_bias
  • layout_constraintVertical_bias
<android.support.constraint.ConstraintLayout ...>
 <Button android:id="@+id/button" ...
 App:layout_constraintHorizontal_bias="0.3"
 app:layout_constraintLeft_toLeftOf="parent"
 app:layout_constraintRight_toRightOf="parent/>
</android.support.constraint.ConstraintLayout>

简单来说现在的Buttom拥有父布局宽度30%的左边距

还有一种有趣的方式,那就是使用Guideline,比如这样:

 <androidx.constraintlayout.widget.Guideline
 android:id="@+id/effect_guideline"
 android:layout_width="wrap_content"
 android:orientation="vertical"
 app:layout_constraintGuide_percent="0.66"
 android:layout_height="wrap_content" />

创建一个拥有左间距66%的Guideline

有了Guideline我们可以随意基于这个约束进行布局,当然如果需要横向的Guideline,只需要改android:orientation=""即可。

当然还有:

  • layout_constraintWidth_percent
  • layout_constraintHeight_percent

直接将宽高设置为父级的百分比。

注意android:layout_width、android:layout_height的优先级会高于它们俩。

尾声

今天写聊的东西就这么多,应该很通俗易懂而且个人感觉比较有实战意义。虽然内容有些少,哈哈。



Tags:android   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天面试遇到同学说做过内存优化,于是我一般都会问那 Bitmap 的像素内存存在哪?大多数同学都回答在 java heap 里面,就比较尴尬,理论上你做内存优化,如果连图片这个内存大户内存...【详细内容】
2021-12-23  Tags: android  点击:(8)  评论:(0)  加入收藏
Android logcat日志封装logcat痛点在Android开发中使用logcat非常频繁,logcat能帮我们定位问题,但是在日常使用中发现每次使用都需要传递tag,并且会遇到输出频率很高的log,在多...【详细内容】
2021-12-22  Tags: android  点击:(8)  评论:(0)  加入收藏
对项目的基本介绍 1.整个框架主要是给MVVM框架使用的,自己写完interface接口后,通过自定义的注解就能自动生成接口方法 2.用Kotlin的Flow去代替Rxjava,因为我发现RxJava功能很...【详细内容】
2021-12-08  Tags: android  点击:(17)  评论:(0)  加入收藏
前言在Android开发过程中,有些时候会根据需要引用别的项目到当前项目里面,而且以Module形式引用。所以本篇博文就来分享一下怎么以Module形式引用别的项目到当前项目中,方便开...【详细内容】
2021-12-07  Tags: android  点击:(22)  评论:(0)  加入收藏
新型Android恶意木马程序伪装成数十款街机、射击和策略游戏,通过华为应用市场AppGallery进行分发,从而窃取设备信息和用户的手机号码,全球目前至少有930万台Android设备被该恶...【详细内容】
2021-12-01  Tags: android  点击:(24)  评论:(0)  加入收藏
作者:fundroid这篇文章偏阅读一些,大家可以了解下 Android 的一些最新动向。每年9/10月份 Google 都会举行约为期2天的 Android Dev Summit,在活动上 Google 的技术专家们会分...【详细内容】
2021-11-30  Tags: android  点击:(15)  评论:(0)  加入收藏
一、 准备工作1、安装JDK,下载地址(可能需要一个oracle账号,大家百度一下或者自行注册一个就行。尽可能选择8或者11,这两个是长期版本)Java SE | Oracle Technology Network | Or...【详细内容】
2021-11-23  Tags: android  点击:(28)  评论:(0)  加入收藏
如果你是一名忠实的Android玩家,那么可能会知道,今年的Android 12系统在版本规划上与“往届”相比可以说是很有些特殊。具体来说,除了前段时间刚刚推出正式版的Android 12外,谷...【详细内容】
2021-11-10  Tags: android  点击:(24)  评论:(0)  加入收藏
使用Maven Publish Plugin插件。(官方支持)一、在Library的build.gradle中配置plugins { id &#39;com.android.library&#39; id &#39;kotlin-android&#39; id &#39;k...【详细内容】
2021-11-05  Tags: android  点击:(37)  评论:(0)  加入收藏
今年5月,谷歌推出了Android 12,这是原生安卓系统史上最大的设计变化,10月4日,谷歌推出全新的Android12正式版本,并且宣布会在今年晚些时候应用于安卓设备,对比Android11的挤牙膏式...【详细内容】
2021-10-29  Tags: android  点击:(125)  评论:(0)  加入收藏
▌简易百科推荐
今天面试遇到同学说做过内存优化,于是我一般都会问那 Bitmap 的像素内存存在哪?大多数同学都回答在 java heap 里面,就比较尴尬,理论上你做内存优化,如果连图片这个内存大户内存...【详细内容】
2021-12-23  像程序那样思考    Tags:Android开发   点击:(8)  评论:(0)  加入收藏
Android logcat日志封装logcat痛点在Android开发中使用logcat非常频繁,logcat能帮我们定位问题,但是在日常使用中发现每次使用都需要传递tag,并且会遇到输出频率很高的log,在多...【详细内容】
2021-12-22  YuCoding    Tags:Android   点击:(8)  评论:(0)  加入收藏
对项目的基本介绍 1.整个框架主要是给MVVM框架使用的,自己写完interface接口后,通过自定义的注解就能自动生成接口方法 2.用Kotlin的Flow去代替Rxjava,因为我发现RxJava功能很...【详细内容】
2021-12-08  网易Leo    Tags:Android开发   点击:(17)  评论:(0)  加入收藏
前言在Android开发过程中,有些时候会根据需要引用别的项目到当前项目里面,而且以Module形式引用。所以本篇博文就来分享一下怎么以Module形式引用别的项目到当前项目中,方便开...【详细内容】
2021-12-07  网易Leo    Tags:Android开发   点击:(22)  评论:(0)  加入收藏
作者:fundroid这篇文章偏阅读一些,大家可以了解下 Android 的一些最新动向。每年9/10月份 Google 都会举行约为期2天的 Android Dev Summit,在活动上 Google 的技术专家们会分...【详细内容】
2021-11-30  像程序那样思考    Tags:Android开发   点击:(15)  评论:(0)  加入收藏
一、 准备工作1、安装JDK,下载地址(可能需要一个oracle账号,大家百度一下或者自行注册一个就行。尽可能选择8或者11,这两个是长期版本)Java SE | Oracle Technology Network | Or...【详细内容】
2021-11-23  永沧    Tags:Android   点击:(28)  评论:(0)  加入收藏
使用Maven Publish Plugin插件。(官方支持)一、在Library的build.gradle中配置plugins { id &#39;com.android.library&#39; id &#39;kotlin-android&#39; id &#39;k...【详细内容】
2021-11-05  羊城小阳    Tags:Android   点击:(37)  评论:(0)  加入收藏
谷歌离推出Play Store应用程序的新数据隐私部分又近了一步。应用程序开发人员现在可以通过谷歌在Play控制台的新 "数据安全表 "填写相关细节。该公司表示,所需信息将从2022年...【详细内容】
2021-10-20    中关村在线  Tags:安卓   点击:(58)  评论:(0)  加入收藏
架构究竟是什么?如何更好的理解架构?我们知道一个APP通常是由class组成,而这些class之间如何组合,相互之间又如何产生作用,就是影响这个APP的关键点。细分的话我们可以将其分为类...【详细内容】
2021-09-17  像程序那样思考    Tags:Android架构   点击:(52)  评论:(0)  加入收藏
概述当Android应用程序需要访问设备上的敏感资源时,应用程序开发人员会使用权限模型。虽然该模型使用起来非常简单,但开发人员在使用权限时容易出错,从而导致安全漏洞。本文中,...【详细内容】
2021-09-07  SecTr安全团队    Tags:Android开发   点击:(66)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条