ConstraintLayout利用百分比属性来解决一些简单的适配问题(四)

接着上一篇文章讲
ConstraintLayout属性之Group,GuideLine(三)
先前的几篇文章只是讲了一下ConstraintLayout的基本属性,都很简单,感觉没有眼前一亮的感觉,接下来要讲的东西也很简单,但是会很实用,尤其是在屏幕适配方面,如果运用的灵活,简直美滋滋。
在平时写布局的时候我们通常都是以dp为单位的,这也是google推崇的一种方式,但是dp并不能完全适配所有的手机,具体原因以及解决方案可参考:
https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA
但是今天我们并不打算用这个方案,而是用constraintLayout的百分比一些属性。在适配之前,我们先看一张图,有个直观的认识
在这里插入图片描述
这两部手机分别是360N6Lite 和坚果Pro2手机
代码如下:

<android.support.constraint.ConstraintLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="140dp"
        android:src="@drawable/test"
        android:scaleType="centerCrop"/>
</android.support.constraint.ConstraintLayout>

可以看到,同样的一套布局,在不同的手机上显示差别会很大。
为了解决这个问题,通常情况下我们会在java代码中重新计算来计算宽和高,但是毕竟这样比较麻烦,所以谷歌爸爸曾经出过一套percentXXXlayout布局,也就是百分比布局,有兴趣的可以在网上搜索资料看一下。
不过我们强大的constraintLayout布局也是支持百分比属性的,那就是

Ratio

属性很简单,app:layout_constraintDimensionRatio
你可以简单的理解为这个就是设置宽高比。在上述图片中,我们可以看到,即使同样一套布局,在不同手机里的展示各不相同。
如果我们用百分比布局还会出现这个情况吗?原则上是不会出现的,我们代码实验一番。
由于我们UI 给的图比例是720*280,也就是宽撑满屏幕,高是280个像素。所以我们就可以写出如下代码

<ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/test"
        app:layout_constraintDimensionRatio="720:280"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>

得到的效果图如下:
在这里插入图片描述
相比之前的适配,简直好太多。

app:layout_constraintDimensionRatio`

默认是宽高比,我们如果有特殊需求可以显示注明高宽比或者宽高比,代码如下图
在这里插入图片描述
我们在写死宽是200dp的情况下,如果显性设置“h,2:1”与默认的2:1效果一样,指的是控件的高度由宽度来决定,比例是宽是1/2; 设置为w,2:1的意思是宽度由高度来决定,宽度是高度的1/2,宽度由于我们已经设置为200dp,所以高度是400dp
同样的逻辑,当设置高度是200dp时候,设置h,2:1代表的意思是 高度由宽度来决定,高度已经设置为200dp,所以高度是宽度的2倍; w,2:1 代表的意思是宽度由高度决定 ,宽度是高度的2倍。
可能跟谷歌的解释有出入,不过一会儿1/2,一会儿2倍的,不知道谷歌是什么骚气的操作,容易记混,默认情况下,我们就不要写w,h啥的了,默认宽高比即可。
除了这些,constraintLayout函数还为我们提供了

app:layout_constraintWidth_default="percent" 
app:layout_constraintHeight_default="percent

在使用这两个属性时候,需要设置宽或者高为0dp或者均为0dp,
app:layout_constraintWidth_default="0.9"表示宽度是屏幕宽的0.9倍
如图所示,其他类似
在这里插入图片描述
其他一些更详细的属性,可参考这篇文章
实战篇ConstraintLayout的崛起之路

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值