前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1.android布局-ConstraintLayout-约束布局

1.android布局-ConstraintLayout-约束布局

作者头像
tea9
发布2022-07-16 16:35:29
5260
发布2022-07-16 16:35:29
举报
文章被收录于专栏:tea9的博客

ConstraintLayout 是什么?

ConstraintLayout

ConstraintLayout 怎么用?

基本用法

代码语言:javascript
复制
layout_constraint[当前控件位置]_[目标控件位置]="[目标控件ID]"

1.上下排列

代码语言:javascript
复制
a  
b  

b:
app:layout_constraintTop_toBottomOf="a"

实例:

代码语言:javascript
复制
<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="match_parent">
    <TextView
        android:id="@+id/a"
        style="@style/text"
        android:text="@string/a" />

    <TextView
        android:id="@+id/b"
        style="@style/text"
        android:text="@string/b"
        app:layout_constraintTop_toBottomOf="@id/a" />
</android.support.constraint.ConstraintLayout>

2.左右排列

代码语言:javascript
复制
a b
a:
app:layout_constraintRight_toLeftOf="b"
b:
app:layout_constraintLeft_toRightOf="a"

实例:

代码语言:javascript
复制
<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="match_parent">
    <TextView
        android:id="@+id/a"
        style="@style/text"
        app:layout_constraintRight_toLeftOf="@id/b"
        android:text="@string/a" />

    <TextView
        android:id="@+id/b"
        style="@style/text"
        android:text="@string/b"
        app:layout_constraintLeft_toRightOf="@id/a" />
</android.support.constraint.ConstraintLayout>

左右排列更严谨的写法

代码语言:javascript
复制
a b
b:
app:layout_constraintStart_toEndOf="a"
app:layout_constraintTop_toTopOf="a"
app:layout_constraintBottom_toBottomOf="a"

实例:

代码语言:javascript
复制
<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="match_parent">
    <TextView
        android:id="@+id/a"
        style="@style/text"
        app:layout_constraintRight_toLeftOf="@id/b"
        app:layout_constraintEnd_toStartOf="@id/b"
        app:layout_constraintTop_toTopOf="@id/b"
        android:text="@string/a" />

    <TextView
        android:id="@+id/b"
        style="@style/text"
        android:text="@string/b"
        app:layout_constraintStart_toEndOf="@id/a"
        app:layout_constraintTop_toTopOf="@id/a"
        app:layout_constraintLeft_toRightOf="@id/a" />
</android.support.constraint.ConstraintLayout>

3.靠最右边

代码语言:javascript
复制
a 靠界面最右边
a:
app:layout_constraiontEnd_toEndOf="parent"

实例:

代码语言:javascript
复制
<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="match_parent">
    <TextView
        android:id="@+id/a"
        style="@style/text"
        app:layout_constraintEnd_toEndOf="parent"
        android:text="@string/a" />
</android.support.constraint.ConstraintLayout>
代码语言:javascript
复制
constraiontEnd 是自己本身的
toEnd 底部停靠的
parent 是父布局

4.三等分然后停靠最底部

代码语言:javascript
复制
a b c
a:
app:layout_constraiontBottom_toBottomOf="parent"
app:layout_constraiontLeft_toLeftOf="parent"
app:layout_constraiontRight_toLeftOf="b"

b:
app:layout_constraiontBottom_toBottomOf="parent"
app:layout_constraiontLeft_toRightOf="a"
app:layout_constraiontRight_toLeftOf="c"

c:
app:layout_constraiontBottom_toBottomOf="parent"
app:layout_constraiontLeft_toRightOf="b"
app:layout_constraiontRight_toRightOf="parent"

上面就是构成官网所说的链(chain)

实例:

代码语言:javascript
复制
<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="match_parent">
    <TextView
        android:id="@+id/a"
        style="@style/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/b"
        android:text="@string/a" />

    <TextView
        android:id="@+id/b"
        style="@style/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/a"
        app:layout_constraintRight_toLeftOf="@id/c"
        android:text="@string/b"/>
    <TextView
        android:id="@+id/c"
        style="@style/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@id/b"
        android:text="@string/c"/>
</android.support.constraint.ConstraintLayout>

延伸两个属性

代码语言:javascript
复制
app:layout_constraiontHorizontal_weight="1" //等分属性

app:layout_constraiontHorizontal_chainstyle="spread_inside" //spread_inside 两端对齐 packed 聚中  spread(默认)控件之间留空

实例: 聚中:

代码语言:javascript
复制
<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="match_parent">
    <TextView
        android:id="@+id/a"
        style="@style/text"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/b"
        android:text="@string/a" />

    <TextView
        android:id="@+id/b"
        style="@style/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/a"
        app:layout_constraintRight_toLeftOf="@id/c"
        android:text="@string/b"/>
    <TextView
        android:id="@+id/c"
        style="@style/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@id/b"
        android:text="@string/c"/>
</android.support.constraint.ConstraintLayout>

左右分散:

代码语言:javascript
复制
<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="match_parent">
    <TextView
        android:id="@+id/a"
        style="@style/text"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/b"
        android:text="@string/a" />

    <TextView
        android:id="@+id/b"
        style="@style/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/a"
        app:layout_constraintRight_toLeftOf="@id/c"
        android:text="@string/b"/>
    <TextView
        android:id="@+id/c"
        style="@style/text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toRightOf="@id/b"
        android:text="@string/c"/>
</android.support.constraint.ConstraintLayout>

Guideline (约束线)

实例:

代码语言:javascript
复制
<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="match_parent">

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.5" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/guideline"
        app:layout_constraintWidth_default="spread" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="@+id/button"
        app:layout_constraintStart_toStartOf="@+id/guideline"
        app:layout_constraintTop_toTopOf="@+id/button" />
</android.support.constraint.ConstraintLayout>



Guideline 是一个约束线(不会画出来)
app:layout_constraintGuide_percent="0.5" 0.5是50%
上面代码是 在视图50%位置 左右两边有两个butthon

实例:

代码语言:javascript
复制
<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="match_parent">

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="40dp"/>
    
    <TextView
        android:id="@+id/a"
        style="@style/text"
        app:layout_constraintTop_toTopOf="@id/guideline"
        android:text="@string/a"/>
    <TextView
        android:id="@+id/b"
        style="@style/text"
        app:layout_constraintTop_toTopOf="@id/guideline"
        app:layout_constraintLeft_toRightOf="@id/a"
        android:text="@string/b"/>
    <TextView
        android:id="@+id/c"
        style="@style/text"
        app:layout_constraintTop_toTopOf="@id/guideline"
        app:layout_constraintLeft_toRightOf="@id/b"
        android:text="@string/c"/>
</android.support.constraint.ConstraintLayout>

在40dp上画一条约束线 
textview以此排列

源码

源码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ConstraintLayout 是什么?
  • ConstraintLayout 怎么用?
    • Guideline (约束线)
    • 源码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档