Android ConstraintLayout 约束布局

Android ConstraintLayout (约束布局) 是 Android Studio 2.3+ 创建 activity_main.xml 的默认布局方式

在上一章节中我们学习了 Android ConstraintLayout 中的 链条 ( Chain ) 属性,本章我们就来学习 Guideline (辅助布局)

Guideline (辅助布局)

Guideline 只能用于 ConstraintLayout 中,是一个工具类,不会被显示,仅仅用于辅助布局

它可以是 horizontal 或者 vertical 的,例如 android:orientation="vertical"

  • verticalGuideline 宽度为零,高度为 ConstraintLayout 的高度
  • horizontalGuideline 高度为零,宽度为 ConstraintLayout 的高度

定位Guideline有三种方式

  1. 指定距离左侧或顶部的固定距离 ( layout_constraintGuide_begin)
  2. 指定距离右侧或底部的固定距离 ( layout_constraintGuide_end)
  3. 指定在父控件中的宽度或高度的百分比 ( layout_constraintGuide_percent)

我们写一个 demo 演示下 Guideline

  1. 创建一个 空的 Android 项目 cn.twle.android.ConstraintLayout

  2. 修改 activity_main.xml 为以下内容

    <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="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="100dp"/>
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:text="Button"
            app:layout_constraintLeft_toLeftOf="@+id/guideline"
            app:layout_constraintTop_toTopOf="parent"/>
    
    </android.support.constraint.ConstraintLayout>
    

运行范例,显示如下

Guideline 类源码

既然是一个辅助类,我倒是很好奇它的源码长的怎么样,哈哈

public class Guideline extends View {
    public Guideline(Context context) {
        super(context);
        super.setVisibility(8);
    }
    public Guideline(Context context, AttributeSet attrs) {
        super(context, attrs);
        super.setVisibility(8);
    }
    public Guideline(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        super.setVisibility(8);
    }
    public Guideline(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr);
        super.setVisibility(8);
    }
    public void setVisibility(int visibility) {
    }
    public void draw(Canvas canvas) {
    }
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        this.setMeasuredDimension(0, 0);
    }
}

源码就这么一点点,而且大部分都是构造函数

查找下 8 是什么,可以发现如下定义

public static final int GONE = 0x00000008;
  1. 也就是说,它默认是 GONE
  2. public void setVisibility(int visibility) 被空实现了,所以没办法改变它的可见度
  3. this.setMeasuredDimension(0, 0);public void draw(Canvas canvas) 的空实现,表明这是一个超轻量的 View,不可见,没有宽高,也不绘制任何东西

所以,Guideline 只有一个作用,那就是 锚点

参考文档

  1. Android ConstraintLayout Guideline

  2. Android ConstrantLayout

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.