java.lang.Object
↳androidx.constraintlayout.core.dsl.Constraint
Gradle dependencies
compile group: 'androidx.constraintlayout', name: 'constraintlayout-core', version: '1.1.0-beta01'
- groupId: androidx.constraintlayout
 - artifactId: constraintlayout-core
 - version: 1.1.0-beta01
 
Artifact androidx.constraintlayout:constraintlayout-core:1.1.0-beta01 it located at Google repository (https://maven.google.com/)
Overview
Provides the API for creating a Constraint Object for use in the Core
 ConstraintLayout & MotionLayout system
Summary
| Methods | 
|---|
| protected void | append(java.lang.StringBuilder builder, java.lang.String name, float value)
  | 
| public java.lang.String | convertStringArrayToString(java.lang.String str[])
 convert a String array into a String representation  | 
| public Constraint.VAnchor | getBaseline()
 get baseline anchor  | 
| public Constraint.VAnchor | getBottom()
 get bottom anchor  | 
| public float | getCircleAngle()
 get circleAngle  | 
| public java.lang.String | getCircleConstraint()
 get circleConstraint  | 
| public int | getCircleRadius()
 get circleRadius  | 
| public java.lang.String | getDimensionRatio()
 get dimensionRatio  | 
| public int | getEditorAbsoluteX()
 get editorAbsoluteX  | 
| public int | getEditorAbsoluteY()
 get editorAbsoluteY  | 
| public Constraint.HAnchor | getEnd()
 get end anchor  | 
| public int | getHeight()
 get height  | 
| public Constraint.Behaviour | getHeightDefault()
 get heightDefault  | 
| public int | getHeightMax()
 get heightMax  | 
| public int | getHeightMin()
 get heightMin  | 
| public float | getHeightPercent()
 get heightPercent  | 
| public float | getHorizontalBias()
 get horizontalBias  | 
| public Constraint.ChainMode | getHorizontalChainStyle()
 get horizontalChainStyle  | 
| public float | getHorizontalWeight()
 get horizontalWeight  | 
| public Constraint.HAnchor | getLeft()
 get left anchor  | 
| public java.lang.String | getReferenceIds()
 get referenceIds  | 
| public Constraint.HAnchor | getRight()
 get right anchor  | 
| public Constraint.HAnchor | getStart()
 get start anchor  | 
| public Constraint.VAnchor | getTop()
 get top anchor  | 
| public float | getVerticalBias()
 get verticalBias  | 
| public Constraint.ChainMode | getVerticalChainStyle()
 get verticalChainStyle  | 
| public float | getVerticalWeight()
 get verticalWeight  | 
| public int | getWidth()
 get width  | 
| public Constraint.Behaviour | getWidthDefault()
 get widthDefault  | 
| public int | getWidthMax()
 get widthMax  | 
| public int | getWidthMin()
 get widthMin  | 
| public float | getWidthPercent()
 get widthPercent  | 
| public boolean | isConstrainedHeight()
 is constrainedHeight  | 
| public boolean | isConstrainedWidth()
 is constrainedWidth  | 
| public void | linkToBaseline(Constraint.VAnchor anchor)
 Connect anchor to Baseline  | 
| public void | linkToBaseline(Constraint.VAnchor anchor, int margin)
 Connect anchor to Baseline  | 
| public void | linkToBaseline(Constraint.VAnchor anchor, int margin, int goneMargin)
 Connect anchor to Baseline  | 
| public void | linkToBottom(Constraint.VAnchor anchor)
 Connect anchor to Bottom  | 
| public void | linkToBottom(Constraint.VAnchor anchor, int margin)
 Connect anchor to Bottom  | 
| public void | linkToBottom(Constraint.VAnchor anchor, int margin, int goneMargin)
 Connect anchor to Bottom  | 
| public void | linkToEnd(Constraint.HAnchor anchor)
 Connect anchor to End  | 
| public void | linkToEnd(Constraint.HAnchor anchor, int margin)
 Connect anchor to End  | 
| public void | linkToEnd(Constraint.HAnchor anchor, int margin, int goneMargin)
 Connect anchor to End  | 
| public void | linkToLeft(Constraint.HAnchor anchor)
 Connect anchor to Left  | 
| public void | linkToLeft(Constraint.HAnchor anchor, int margin)
 Connect anchor to Left  | 
| public void | linkToLeft(Constraint.HAnchor anchor, int margin, int goneMargin)
 Connect anchor to Left  | 
| public void | linkToRight(Constraint.HAnchor anchor)
 Connect anchor to Right  | 
| public void | linkToRight(Constraint.HAnchor anchor, int margin)
 Connect anchor to Right  | 
| public void | linkToRight(Constraint.HAnchor anchor, int margin, int goneMargin)
 Connect anchor to Right  | 
| public void | linkToStart(Constraint.HAnchor anchor)
 Connect anchor to Start  | 
| public void | linkToStart(Constraint.HAnchor anchor, int margin)
 Connect anchor to Start  | 
| public void | linkToStart(Constraint.HAnchor anchor, int margin, int goneMargin)
 Connect anchor to Start  | 
| public void | linkToTop(Constraint.VAnchor anchor)
 Connect anchor to Top  | 
| public void | linkToTop(Constraint.VAnchor anchor, int margin)
 Connect anchor to Top  | 
| public void | linkToTop(Constraint.VAnchor anchor, int margin, int goneMargin)
 Connect anchor to Top  | 
| public void | setCircleAngle(float circleAngle)
 set circleAngle  | 
| public void | setCircleConstraint(java.lang.String circleConstraint)
 set circleConstraint  | 
| public void | setCircleRadius(int circleRadius)
 set circleRadius  | 
| public void | setConstrainedHeight(boolean constrainedHeight)
 set constrainedHeight  | 
| public void | setConstrainedWidth(boolean constrainedWidth)
 set constrainedWidth  | 
| public void | setDimensionRatio(java.lang.String dimensionRatio)
 set dimensionRatio  | 
| public void | setEditorAbsoluteX(int editorAbsoluteX)
 set editorAbsoluteX  | 
| public void | setEditorAbsoluteY(int editorAbsoluteY)
 set editorAbsoluteY  | 
| public void | setHeight(int height)
 set height  | 
| public void | setHeightDefault(Constraint.Behaviour heightDefault)
 set heightDefault  | 
| public void | setHeightMax(int heightMax)
 set heightMax  | 
| public void | setHeightMin(int heightMin)
 set heightMin  | 
| public void | setHeightPercent(float heightPercent)
 set heightPercent  | 
| public void | setHorizontalBias(float horizontalBias)
 set horizontalBias  | 
| public void | setHorizontalChainStyle(Constraint.ChainMode horizontalChainStyle)
 set horizontalChainStyle  | 
| public void | setHorizontalWeight(float horizontalWeight)
 set horizontalWeight  | 
| public void | setReferenceIds(java.lang.String referenceIds[])
 set referenceIds  | 
| public void | setVerticalBias(float verticalBias)
 set verticalBias  | 
| public void | setVerticalChainStyle(Constraint.ChainMode verticalChainStyle)
 set verticalChainStyle  | 
| public void | setVerticalWeight(float verticalWeight)
 set verticalWeight  | 
| public void | setWidth(int width)
 set width  | 
| public void | setWidthDefault(Constraint.Behaviour widthDefault)
 set widthDefault  | 
| public void | setWidthMax(int widthMax)
 set widthMax  | 
| public void | setWidthMin(int widthMin)
 set widthMin  | 
| public void | setWidthPercent(float widthPercent)
 set widthPercent  | 
| public java.lang.String | toString()
  | 
| from java.lang.Object | clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | 
Fields
Constructors
public 
Constraint(java.lang.String id)
Methods
get left anchor
Returns:
left anchor
get right anchor
Returns:
right anchor
get top anchor
Returns:
top anchor
get bottom anchor
Returns:
bottom anchor
get start anchor
Returns:
start anchor
get end anchor
Returns:
end anchor
get baseline anchor
Returns:
baseline anchor
public float 
getHorizontalBias()
get horizontalBias
Returns:
horizontalBias
public void 
setHorizontalBias(float horizontalBias)
set horizontalBias
Parameters:
horizontalBias: 
public float 
getVerticalBias()
get verticalBias
Returns:
verticalBias
public void 
setVerticalBias(float verticalBias)
set verticalBias
Parameters:
verticalBias: 
public java.lang.String 
getDimensionRatio()
get dimensionRatio
Returns:
dimensionRatio
public void 
setDimensionRatio(java.lang.String dimensionRatio)
set dimensionRatio
Parameters:
dimensionRatio: 
public java.lang.String 
getCircleConstraint()
get circleConstraint
Returns:
circleConstraint
public void 
setCircleConstraint(java.lang.String circleConstraint)
set circleConstraint
Parameters:
circleConstraint: 
public int 
getCircleRadius()
get circleRadius
Returns:
circleRadius
public void 
setCircleRadius(int circleRadius)
set circleRadius
Parameters:
circleRadius: 
public float 
getCircleAngle()
get circleAngle
Returns:
circleAngle
public void 
setCircleAngle(float circleAngle)
set circleAngle
Parameters:
circleAngle: 
public int 
getEditorAbsoluteX()
get editorAbsoluteX
Returns:
editorAbsoluteX
public void 
setEditorAbsoluteX(int editorAbsoluteX)
set editorAbsoluteX
Parameters:
editorAbsoluteX: 
public int 
getEditorAbsoluteY()
get editorAbsoluteY
Returns:
editorAbsoluteY
public void 
setEditorAbsoluteY(int editorAbsoluteY)
set editorAbsoluteY
Parameters:
editorAbsoluteY: 
public float 
getVerticalWeight()
get verticalWeight
Returns:
verticalWeight
public void 
setVerticalWeight(float verticalWeight)
set verticalWeight
Parameters:
verticalWeight: 
public float 
getHorizontalWeight()
get horizontalWeight
Returns:
horizontalWeight
public void 
setHorizontalWeight(float horizontalWeight)
set horizontalWeight
Parameters:
horizontalWeight: 
get horizontalChainStyle
Returns:
horizontalChainStyle
set horizontalChainStyle
Parameters:
horizontalChainStyle: 
get verticalChainStyle
Returns:
verticalChainStyle
set verticalChainStyle
Parameters:
verticalChainStyle: 
get widthDefault
Returns:
widthDefault
set widthDefault
Parameters:
widthDefault: 
get heightDefault
Returns:
heightDefault
set heightDefault
Parameters:
heightDefault: 
get widthMax
Returns:
widthMax
public void 
setWidthMax(int widthMax)
set widthMax
Parameters:
widthMax: 
public int 
getHeightMax()
get heightMax
Returns:
heightMax
public void 
setHeightMax(int heightMax)
set heightMax
Parameters:
heightMax: 
get widthMin
Returns:
widthMin
public void 
setWidthMin(int widthMin)
set widthMin
Parameters:
widthMin: 
public int 
getHeightMin()
get heightMin
Returns:
heightMin
public void 
setHeightMin(int heightMin)
set heightMin
Parameters:
heightMin: 
public float 
getWidthPercent()
get widthPercent
Returns:
public void 
setWidthPercent(float widthPercent)
set widthPercent
Parameters:
widthPercent: 
public float 
getHeightPercent()
get heightPercent
Returns:
heightPercent
public void 
setHeightPercent(float heightPercent)
set heightPercent
Parameters:
heightPercent: 
public java.lang.String 
getReferenceIds()
get referenceIds
Returns:
referenceIds
public void 
setReferenceIds(java.lang.String referenceIds[])
set referenceIds
Parameters:
referenceIds: 
public boolean 
isConstrainedWidth()
is constrainedWidth
Returns:
true if width constrained
public void 
setConstrainedWidth(boolean constrainedWidth)
set constrainedWidth
Parameters:
constrainedWidth: 
public boolean 
isConstrainedHeight()
is constrainedHeight
Returns:
true if height constrained
public void 
setConstrainedHeight(boolean constrainedHeight)
set constrainedHeight
Parameters:
constrainedHeight: 
get width
Returns:
width
public void 
setWidth(int width)
set width
Parameters:
width: 
get height
Returns:
height
public void 
setHeight(int height)
set height
Parameters:
height: 
Connect anchor to Top
Parameters:
anchor: anchor to be connected
Connect anchor to Left
Parameters:
anchor: anchor to be connected
Connect anchor to Right
Parameters:
anchor: anchor to be connected
Connect anchor to Start
Parameters:
anchor: anchor to be connected
Connect anchor to End
Parameters:
anchor: anchor to be connected
Connect anchor to Bottom
Parameters:
anchor: anchor to be connected
Connect anchor to Baseline
Parameters:
anchor: anchor to be connected
Connect anchor to Top
Parameters:
anchor: anchor to be connected
margin: value of the margin
Connect anchor to Left
Parameters:
anchor: anchor to be connected
margin: value of the margin
Connect anchor to Right
Parameters:
anchor: anchor to be connected
margin: value of the margin
Connect anchor to Start
Parameters:
anchor: anchor to be connected
margin: value of the margin
Connect anchor to End
Parameters:
anchor: anchor to be connected
margin: value of the margin
Connect anchor to Bottom
Parameters:
anchor: anchor to be connected
margin: value of the margin
Connect anchor to Baseline
Parameters:
anchor: anchor to be connected
margin: value of the margin
Connect anchor to Top
Parameters:
anchor: anchor to be connected
margin: value of the margin
goneMargin: value of the goneMargin
Connect anchor to Left
Parameters:
anchor: anchor to be connected
margin: value of the margin
goneMargin: value of the goneMargin
Connect anchor to Right
Parameters:
anchor: anchor to be connected
margin: value of the margin
goneMargin: value of the goneMargin
Connect anchor to Start
Parameters:
anchor: anchor to be connected
margin: value of the margin
goneMargin: value of the goneMargin
Connect anchor to End
Parameters:
anchor: anchor to be connected
margin: value of the margin
goneMargin: value of the goneMargin
Connect anchor to Bottom
Parameters:
anchor: anchor to be connected
margin: value of the margin
goneMargin: value of the goneMargin
Connect anchor to Baseline
Parameters:
anchor: anchor to be connected
margin: value of the margin
goneMargin: value of the goneMargin
public java.lang.String 
convertStringArrayToString(java.lang.String str[])
convert a String array into a String representation
Parameters:
str: String array to be converted
Returns:
a String representation of the input array.
protected void 
append(java.lang.StringBuilder builder, java.lang.String name, float value)
public java.lang.String 
toString()
Source
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package androidx.constraintlayout.core.dsl;
import java.util.HashMap;
import java.util.Map;
/**
 * Provides the API for creating a Constraint Object for use in the Core
 * ConstraintLayout & MotionLayout system
 */
public class Constraint {
    private final String mId;
    public static final Constraint PARENT = new Constraint("parent");
    public Constraint(String id) {
        mId = id;
    }
    public class VAnchor extends Anchor {
        VAnchor(VSide side) {
            super(Side.valueOf(side.name()));
        }
    }
    public class HAnchor extends Anchor {
        HAnchor(HSide side) {
            super(Side.valueOf(side.name()));
        }
    }
    public class Anchor {
        final Side mSide;
        Anchor mConnection = null;
        int mMargin;
        int mGoneMargin = Integer.MIN_VALUE;
        Anchor(Side side) {
            mSide = side;
        }
        public String getId() {
            return mId;
        }
        Constraint getParent() {
            return Constraint.this;
        }
        public void build(StringBuilder builder) {
            if (mConnection != null) {
                builder.append(mSide.toString().toLowerCase())
                        .append(":").append(this).append(",\n");
            }
        }
        @Override
        public String toString() {
            StringBuilder ret = new StringBuilder("[");
            if (mConnection != null) {
                ret.append("'").append(mConnection.getId()).append("',")
                        .append("'").append(mConnection.mSide.toString().toLowerCase()).append("'");
            }
            if (mMargin != 0) {
                ret.append(",").append(mMargin);
            }
            if (mGoneMargin != Integer.MIN_VALUE) {
                if ( mMargin == 0) {
                    ret.append(",0,").append(mGoneMargin);
                } else {
                    ret.append(",").append(mGoneMargin);
                }
            }
            ret.append("]");
            return ret.toString();
        }
    }
    public enum Behaviour {
        SPREAD,
        WRAP,
        PERCENT,
        RATIO,
        RESOLVED,
    }
    public enum ChainMode {
        SPREAD,
        SPREAD_INSIDE,
        PACKED,
    }
    public enum VSide {
        TOP,
        BOTTOM,
        BASELINE
    }
    public enum HSide {
        LEFT,
        RIGHT,
        START,
        END
    }
    public enum Side {
        LEFT,
        RIGHT,
        TOP,
        BOTTOM,
        START,
        END,
        BASELINE
    }
    static int UNSET = Integer.MIN_VALUE;
    static Map<ChainMode, String> chainModeMap = new HashMap<>();
    static {
        chainModeMap.put(ChainMode.SPREAD, "spread");
        chainModeMap.put(ChainMode.SPREAD_INSIDE, "spread_inside");
        chainModeMap.put(ChainMode.PACKED, "packed");
    }
    String helperType = null;
    String helperJason = null;
    private HAnchor mLeft = new HAnchor(HSide.LEFT);
    private HAnchor mRight = new HAnchor(HSide.RIGHT);
    private VAnchor mTop = new VAnchor(VSide.TOP);
    private VAnchor mBottom = new VAnchor(VSide.BOTTOM);
    private HAnchor mStart = new HAnchor(HSide.START);
    private HAnchor mEnd = new HAnchor(HSide.END);
    private VAnchor mBaseline = new VAnchor(VSide.BASELINE);
    private int mWidth = UNSET;
    private int mHeight = UNSET;
    private float mHorizontalBias = Float.NaN;
    private float mVerticalBias = Float.NaN;
    private String mDimensionRatio = null;
    private String mCircleConstraint = null;
    private int mCircleRadius = Integer.MIN_VALUE;
    private float mCircleAngle = Float.NaN;
    private int mEditorAbsoluteX = Integer.MIN_VALUE;
    private int mEditorAbsoluteY = Integer.MIN_VALUE;
    private float mVerticalWeight = Float.NaN;
    private float mHorizontalWeight = Float.NaN;
    private ChainMode mHorizontalChainStyle = null;
    private ChainMode mVerticalChainStyle = null;
    private Behaviour mWidthDefault = null;
    private Behaviour mHeightDefault = null;
    private int mWidthMax = UNSET;
    private int mHeightMax = UNSET;
    private int mWidthMin = UNSET;
    private int mHeightMin = UNSET;
    private float mWidthPercent = Float.NaN;
    private float mHeightPercent = Float.NaN;
    private String[] mReferenceIds = null;
    private boolean mConstrainedWidth = false;
    private boolean mConstrainedHeight = false;
    /**
     * get left anchor
     *
     * @return left anchor
     */
    public HAnchor getLeft() {
        return mLeft;
    }
    /**
     * get right anchor
     *
     * @return right anchor
     */
    public HAnchor getRight() {
        return mRight;
    }
    /**
     * get top anchor
     *
     * @return top anchor
     */
    public VAnchor getTop() {
        return mTop;
    }
    /**
     * get bottom anchor
     *
     * @return bottom anchor
     */
    public VAnchor getBottom() {
        return mBottom;
    }
    /**
     * get start anchor
     *
     * @return start anchor
     */
    public HAnchor getStart() {
        return mStart;
    }
    /**
     * get end anchor
     *
     * @return end anchor
     */
    public HAnchor getEnd() {
        return mEnd;
    }
    /**
     * get baseline anchor
     *
     * @return baseline anchor
     */
    public VAnchor getBaseline() {
        return mBaseline;
    }
    /**
     * get horizontalBias
     *
     * @return horizontalBias
     */
    public float getHorizontalBias() {
        return mHorizontalBias;
    }
    /**
     * set horizontalBias
     *
     * @param horizontalBias
     */
    public void setHorizontalBias(float horizontalBias) {
        this.mHorizontalBias = horizontalBias;
    }
    /**
     * get verticalBias
     *
     * @return verticalBias
     */
    public float getVerticalBias() {
        return mVerticalBias;
    }
    /**
     * set verticalBias
     *
     * @param verticalBias
     */
    public void setVerticalBias(float verticalBias) {
        this.mVerticalBias = verticalBias;
    }
    /**
     * get dimensionRatio
     *
     * @return dimensionRatio
     */
    public String getDimensionRatio() {
        return mDimensionRatio;
    }
    /**
     * set dimensionRatio
     *
     * @param dimensionRatio
     */
    public void setDimensionRatio(String dimensionRatio) {
        this.mDimensionRatio = dimensionRatio;
    }
    /**
     * get circleConstraint
     *
     * @return circleConstraint
     */
    public String getCircleConstraint() {
        return mCircleConstraint;
    }
    /**
     * set circleConstraint
     *
     * @param circleConstraint
     */
    public void setCircleConstraint(String circleConstraint) {
        this.mCircleConstraint = circleConstraint;
    }
    /**
     * get circleRadius
     *
     * @return circleRadius
     */
    public int getCircleRadius() {
        return mCircleRadius;
    }
    /**
     * set circleRadius
     *
     * @param circleRadius
     */
    public void setCircleRadius(int circleRadius) {
        this.mCircleRadius = circleRadius;
    }
    /**
     * get circleAngle
     *
     * @return circleAngle
     */
    public float getCircleAngle() {
        return mCircleAngle;
    }
    /**
     * set circleAngle
     *
     * @param circleAngle
     */
    public void setCircleAngle(float circleAngle) {
        this.mCircleAngle = circleAngle;
    }
    /**
     * get editorAbsoluteX
     * @return editorAbsoluteX
     */
    public int getEditorAbsoluteX() {
        return mEditorAbsoluteX;
    }
    /**
     * set editorAbsoluteX
     * @param editorAbsoluteX
     */
    public void setEditorAbsoluteX(int editorAbsoluteX) {
        mEditorAbsoluteX = editorAbsoluteX;
    }
    /**
     * get editorAbsoluteY
     * @return editorAbsoluteY
     */
    public int getEditorAbsoluteY() {
        return mEditorAbsoluteY;
    }
    /**
     * set editorAbsoluteY
     * @param editorAbsoluteY
     */
    public void setEditorAbsoluteY(int editorAbsoluteY) {
        mEditorAbsoluteY = editorAbsoluteY;
    }
    /**
     * get verticalWeight
     *
     * @return verticalWeight
     */
    public float getVerticalWeight() {
        return mVerticalWeight;
    }
    /**
     * set verticalWeight
     *
     * @param verticalWeight
     */
    public void setVerticalWeight(float verticalWeight) {
        this.mVerticalWeight = verticalWeight;
    }
    /**
     * get horizontalWeight
     *
     * @return horizontalWeight
     */
    public float getHorizontalWeight() {
        return mHorizontalWeight;
    }
    /**
     * set horizontalWeight
     *
     * @param horizontalWeight
     */
    public void setHorizontalWeight(float horizontalWeight) {
        this.mHorizontalWeight = horizontalWeight;
    }
    /**
     * get horizontalChainStyle
     *
     * @return horizontalChainStyle
     */
    public ChainMode getHorizontalChainStyle() {
        return mHorizontalChainStyle;
    }
    /**
     * set horizontalChainStyle
     *
     * @param horizontalChainStyle
     */
    public void setHorizontalChainStyle(
            ChainMode horizontalChainStyle) {
        this.mHorizontalChainStyle = horizontalChainStyle;
    }
    /**
     * get verticalChainStyle
     *
     * @return verticalChainStyle
     */
    @SuppressWarnings("HiddenTypeParameter")
    public ChainMode getVerticalChainStyle() {
        return mVerticalChainStyle;
    }
    /**
     * set verticalChainStyle
     *
     * @param verticalChainStyle
     */
    public void setVerticalChainStyle(
            @SuppressWarnings("HiddenTypeParameter") ChainMode verticalChainStyle) {
        this.mVerticalChainStyle = verticalChainStyle;
    }
    /**
     * get widthDefault
     *
     * @return widthDefault
     */
    @SuppressWarnings("HiddenTypeParameter")
    public Behaviour getWidthDefault() {
        return mWidthDefault;
    }
    /**
     * set widthDefault
     *
     * @param widthDefault
     */
    public void setWidthDefault(@SuppressWarnings("HiddenTypeParameter")
            Behaviour widthDefault) {
        this.mWidthDefault = widthDefault;
    }
    /**
     * get heightDefault
     *
     * @return heightDefault
     */
    @SuppressWarnings("HiddenTypeParameter")
    public Behaviour getHeightDefault() {
        return mHeightDefault;
    }
    /**
     * set heightDefault
     *
     * @param heightDefault
     */
    public void setHeightDefault(@SuppressWarnings("HiddenTypeParameter")
            Behaviour heightDefault) {
        this.mHeightDefault = heightDefault;
    }
    /**
     * get widthMax
     *
     * @return widthMax
     */
    public int getWidthMax() {
        return mWidthMax;
    }
    /**
     * set widthMax
     *
     * @param widthMax
     */
    public void setWidthMax(int widthMax) {
        this.mWidthMax = widthMax;
    }
    /**
     * get heightMax
     *
     * @return heightMax
     */
    public int getHeightMax() {
        return mHeightMax;
    }
    /**
     * set heightMax
     *
     * @param heightMax
     */
    public void setHeightMax(int heightMax) {
        this.mHeightMax = heightMax;
    }
    /**
     * get widthMin
     *
     * @return widthMin
     */
    public int getWidthMin() {
        return mWidthMin;
    }
    /**
     * set widthMin
     *
     * @param widthMin
     */
    public void setWidthMin(int widthMin) {
        this.mWidthMin = widthMin;
    }
    /**
     * get heightMin
     *
     * @return heightMin
     */
    public int getHeightMin() {
        return mHeightMin;
    }
    /**
     * set heightMin
     *
     * @param heightMin
     */
    public void setHeightMin(int heightMin) {
        this.mHeightMin = heightMin;
    }
    /**
     * get widthPercent
     *
     * @return
     */
    public float getWidthPercent() {
        return mWidthPercent;
    }
    /**
     * set widthPercent
     *
     * @param widthPercent
     */
    public void setWidthPercent(float widthPercent) {
        this.mWidthPercent = widthPercent;
    }
    /**
     * get heightPercent
     *
     * @return heightPercent
     */
    public float getHeightPercent() {
        return mHeightPercent;
    }
    /**
     * set heightPercent
     *
     * @param heightPercent
     */
    public void setHeightPercent(float heightPercent) {
        this.mHeightPercent = heightPercent;
    }
    /**
     * get referenceIds
     *
     * @return referenceIds
     */
    public String[] getReferenceIds() {
        return mReferenceIds;
    }
    /**
     * set referenceIds
     *
     * @param referenceIds
     */
    public void setReferenceIds(String[] referenceIds) {
        mReferenceIds = referenceIds;
    }
    /**
     * is constrainedWidth
     *
     * @return true if width constrained
     */
    public boolean isConstrainedWidth() {
        return mConstrainedWidth;
    }
    /**
     * set constrainedWidth
     *
     * @param constrainedWidth
     */
    public void setConstrainedWidth(boolean constrainedWidth) {
        this.mConstrainedWidth = constrainedWidth;
    }
    /**
     * is constrainedHeight
     *
     * @return true if height constrained
     */
    public boolean isConstrainedHeight() {
        return mConstrainedHeight;
    }
    /**
     * set constrainedHeight
     *
     * @param constrainedHeight
     */
    public void setConstrainedHeight(boolean constrainedHeight) {
        this.mConstrainedHeight = constrainedHeight;
    }
    /**
     * get width
     * @return width
     */
    public int getWidth() {
        return mWidth;
    }
    /**
     * set width
     *
     * @param width
     */
    public void setWidth(int width) {
        mWidth = width;
    }
    /**
     * get height
     * @return height
     */
    public int getHeight() {
        return mHeight;
    }
    /**
     * set height
     *
     * @param height
     */
    public void setHeight(int height) {
        mHeight = height;
    }
    /**
     * Connect anchor to Top
     *
     * @param anchor anchor to be connected
     */
    public void linkToTop(VAnchor anchor) {
        linkToTop(anchor, 0);
    }
    /**
     * Connect anchor to Left
     *
     * @param anchor anchor to be connected
     */
    public void linkToLeft(HAnchor anchor) {
        linkToLeft(anchor, 0);
    }
    /**
     * Connect anchor to Right
     *
     * @param anchor anchor to be connected
     */
    public void linkToRight(HAnchor anchor) {
        linkToRight(anchor, 0);
    }
    /**
     * Connect anchor to Start
     *
     * @param anchor anchor to be connected
     */
    public void linkToStart(HAnchor anchor) {
        linkToStart(anchor, 0);
    }
    /**
     * Connect anchor to End
     *
     * @param anchor anchor to be connected
     */
    public void linkToEnd(HAnchor anchor) {
        linkToEnd(anchor, 0);
    }
    /**
     * Connect anchor to Bottom
     *
     * @param anchor anchor to be connected
     */
    public void linkToBottom(VAnchor anchor) {
        linkToBottom(anchor, 0);
    }
    /**
     * Connect anchor to Baseline
     *
     * @param anchor anchor to be connected
     */
    public void linkToBaseline(VAnchor anchor) {
        linkToBaseline(anchor, 0);
    }
    /**
     * Connect anchor to Top
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     */
    public void linkToTop(VAnchor anchor, int margin) {
        linkToTop(anchor, margin, Integer.MIN_VALUE);
    }
    /**
     * Connect anchor to Left
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     */
    public void linkToLeft(HAnchor anchor, int margin) {
        linkToLeft(anchor, margin, Integer.MIN_VALUE);
    }
    /**
     * Connect anchor to Right
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     */
    public void linkToRight(HAnchor anchor, int margin) {
        linkToRight(anchor, margin, Integer.MIN_VALUE);
    }
    /**
     * Connect anchor to Start
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     */
    public void linkToStart(HAnchor anchor, int margin) {
        linkToStart(anchor, margin, Integer.MIN_VALUE);
    }
    /**
     * Connect anchor to End
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     */
    public void linkToEnd(HAnchor anchor, int margin) {
        linkToEnd(anchor, margin, Integer.MIN_VALUE);
    }
    /**
     * Connect anchor to Bottom
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     */
    public void linkToBottom(VAnchor anchor, int margin) {
        linkToBottom(anchor, margin, Integer.MIN_VALUE);
    }
    /**
     * Connect anchor to Baseline
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     */
    public void linkToBaseline(VAnchor anchor, int margin) {
        linkToBaseline(anchor, margin, Integer.MIN_VALUE);
    }
    /**
     * Connect anchor to Top
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     * @param goneMargin value of the goneMargin
     */
    public void linkToTop(VAnchor anchor, int margin, int goneMargin) {
        mTop.mConnection = anchor;
        mTop.mMargin = margin;
        mTop.mGoneMargin = goneMargin;
    }
    /**
     * Connect anchor to Left
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     * @param goneMargin value of the goneMargin
     */
    public void linkToLeft(HAnchor anchor, int margin, int goneMargin) {
        mLeft.mConnection = anchor;
        mLeft.mMargin = margin;
        mLeft.mGoneMargin = goneMargin;
    }
    /**
     * Connect anchor to Right
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     * @param goneMargin value of the goneMargin
     */
    public void linkToRight(HAnchor anchor, int margin, int goneMargin) {
        mRight.mConnection = anchor;
        mRight.mMargin = margin;
        mRight.mGoneMargin = goneMargin;
    }
    /**
     * Connect anchor to Start
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     * @param goneMargin value of the goneMargin
     */
    public void linkToStart(HAnchor anchor, int margin, int goneMargin) {
        mStart.mConnection = anchor;
        mStart.mMargin = margin;
        mStart.mGoneMargin = goneMargin;
    }
    /**
     * Connect anchor to End
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     * @param goneMargin value of the goneMargin
     */
    public void linkToEnd(HAnchor anchor, int margin, int goneMargin) {
        mEnd.mConnection = anchor;
        mEnd.mMargin = margin;
        mEnd.mGoneMargin = goneMargin;
    }
    /**
     * Connect anchor to Bottom
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     * @param goneMargin value of the goneMargin
     */
    public void linkToBottom(VAnchor anchor, int margin, int goneMargin) {
        mBottom.mConnection = anchor;
        mBottom.mMargin = margin;
        mBottom.mGoneMargin = goneMargin;
    }
    /**
     * Connect anchor to Baseline
     *
     * @param anchor anchor to be connected
     * @param margin value of the margin
     * @param goneMargin value of the goneMargin
     */
    public void linkToBaseline(VAnchor anchor, int margin, int goneMargin) {
        mBaseline.mConnection = anchor;
        mBaseline.mMargin = margin;
        mBaseline.mGoneMargin = goneMargin;
    }
    /**
     * convert a String array into a String representation
     *
     * @param str String array to be converted
     * @return a String representation of the input array.
     */
    public String convertStringArrayToString(String[] str) {
        StringBuilder ret = new StringBuilder("[");
        for (int i = 0; i < str.length; i++) {
            ret.append((i == 0) ? "'" : ",'");
            ret.append(str[i]);
            ret.append("'");
        }
        ret.append("]");
        return ret.toString();
    }
    protected void append(StringBuilder builder, String name, float value) {
        if (Float.isNaN(value)) {
            return;
        }
        builder.append(name);
        builder.append(":").append(value).append(",\n");
    }
    @Override
    public String toString() {
        StringBuilder ret = new StringBuilder(mId + ":{\n");
        mLeft.build(ret);
        mRight.build(ret);
        mTop.build(ret);
        mBottom.build(ret);
        mStart.build(ret);
        mEnd.build(ret);
        mBaseline.build(ret);
        if (mWidth != UNSET) {
            ret.append("width:").append(mWidth).append(",\n");
        }
        if (mHeight != UNSET) {
            ret.append("height:").append(mHeight).append(",\n");
        }
        append(ret, "horizontalBias", mHorizontalBias);
        append(ret, "verticalBias", mVerticalBias);
        if (mDimensionRatio != null) {
            ret.append("dimensionRatio:'").append(mDimensionRatio).append("',\n");
        }
        if (mCircleConstraint != null) {
            if (!Float.isNaN(mCircleAngle) || mCircleRadius != Integer.MIN_VALUE) {
                ret.append("circular:['").append(mCircleConstraint).append("'");
                if (!Float.isNaN(mCircleAngle)) {
                    ret.append(",").append(mCircleAngle);
                }
                if (mCircleRadius != Integer.MIN_VALUE) {
                    if (Float.isNaN(mCircleAngle)) {
                        ret.append(",0,").append(mCircleRadius);
                    } else {
                        ret.append(",").append(mCircleRadius);
                    }
                }
                ret.append("],\n");
            }
        }
        append(ret, "verticalWeight", mVerticalWeight);
        append(ret, "horizontalWeight", mHorizontalWeight);
        if (mHorizontalChainStyle != null) {
            ret.append("horizontalChainStyle:'").append(chainModeMap.get(mHorizontalChainStyle))
                    .append("',\n");
        }
        if (mVerticalChainStyle != null) {
            ret.append("verticalChainStyle:'").append(chainModeMap.get(mVerticalChainStyle))
                    .append("',\n");
        }
        if (mWidthDefault != null) {
            if (mWidthMax == UNSET && mWidthMin == UNSET) {
                ret.append("width:'").append(mWidthDefault.toString().toLowerCase())
                        .append("',\n");
            } else {
                ret.append("width:{value:'").append(mWidthDefault.toString().toLowerCase())
                        .append("'");
                if (mWidthMax != UNSET) {
                    ret.append(",max:").append(mWidthMax);
                }
                if (mWidthMin != UNSET) {
                    ret.append(",min:").append(mWidthMin);
                }
                ret.append("},\n");
            }
        }
        if (mHeightDefault != null) {
            if (mHeightMax == UNSET && mHeightMin == UNSET) {
                ret.append("height:'").append(mHeightDefault.toString().toLowerCase())
                        .append("',\n");
            } else {
                ret.append("height:{value:'").append(mHeightDefault.toString().toLowerCase())
                        .append("'");
                if (mHeightMax != UNSET) {
                    ret.append(",max:").append(mHeightMax);
                }
                if (mHeightMin != UNSET) {
                    ret.append(",min:").append(mHeightMin);
                }
                ret.append("},\n");
            }
        }
        if (!Double.isNaN(mWidthPercent)) {
            ret.append("width:'").append((int) mWidthPercent).append("%',\n");
        }
        if (!Double.isNaN(mHeightPercent)) {
            ret.append("height:'").append((int) mHeightPercent).append("%',\n");
        }
        if (mReferenceIds != null) {
            ret.append("referenceIds:")
                    .append(convertStringArrayToString(mReferenceIds))
                    .append(",\n");
        }
        if (mConstrainedWidth) {
            ret.append("constrainedWidth:").append(mConstrainedWidth).append(",\n");
        }
        if (mConstrainedHeight) {
            ret.append("constrainedHeight:").append(mConstrainedHeight).append(",\n");
        }
        ret.append("},\n");
        return ret.toString();
    }
}