diff options
-rw-r--r-- | solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java | 4 | ||||
-rw-r--r-- | solver/src/test/java/android/support/constraint/solver/RatioTest.java | 27 |
2 files changed, 29 insertions, 2 deletions
diff --git a/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java b/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java index 0302056..a5e143d 100644 --- a/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java +++ b/solver/src/main/java/android/support/constraint/solver/widgets/ConstraintWidget.java @@ -2647,9 +2647,9 @@ public class ConstraintWidget { applyCentering = true; applyBoundsCheck = true; int strength = SolverVariable.STRENGTH_HIGHEST; - if (!useRatio && mResolvedDimensionRatioSide != UNKNOWN) { + if (!useRatio && mResolvedDimensionRatioSide != UNKNOWN && matchMaxDimension <= 0) { // useRatio is true if the side we base ourselves on for the ratio is this one - // in that case, we need to have a stronger constraint. + // if that's not the case, we need to have a stronger constraint. strength = SolverVariable.STRENGTH_FIXED; } system.addEquality(begin, beginTarget, beginAnchor.getMargin(), strength); diff --git a/solver/src/test/java/android/support/constraint/solver/RatioTest.java b/solver/src/test/java/android/support/constraint/solver/RatioTest.java index 3ce404b..16b745a 100644 --- a/solver/src/test/java/android/support/constraint/solver/RatioTest.java +++ b/solver/src/test/java/android/support/constraint/solver/RatioTest.java @@ -26,6 +26,33 @@ import static org.testng.Assert.assertEquals; public class RatioTest { @Test + public void testRatioMax() { + ConstraintWidgetContainer root = new ConstraintWidgetContainer(0, 0, 1000, 1000); + ConstraintWidget A = new ConstraintWidget(100, 100); + root.setDebugName("root"); + root.add(A); + A.setDebugName("A"); + + A.connect(ConstraintAnchor.Type.LEFT, root, ConstraintAnchor.Type.LEFT); + + A.connect(ConstraintAnchor.Type.TOP, root, ConstraintAnchor.Type.TOP); + A.connect(ConstraintAnchor.Type.BOTTOM, root, ConstraintAnchor.Type.BOTTOM); + + A.setHorizontalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT); + A.setVerticalDimensionBehaviour(ConstraintWidget.DimensionBehaviour.MATCH_CONSTRAINT); + A.setVerticalMatchStyle(ConstraintWidget.MATCH_CONSTRAINT_RATIO, 0, 150, 0); + A.setDimensionRatio("W,16:9"); + + root.setOptimizationLevel(Optimizer.OPTIMIZATION_NONE); + root.layout(); + + System.out.println("a) root: " + root + " A: " + A); + assertEquals(A.getWidth(), 267); + assertEquals(A.getHeight(), 150); + assertEquals(A.getTop(), 425); + } + + @Test public void testRatioSingleTarget() { ConstraintWidgetContainer root = new ConstraintWidgetContainer(0, 0, 1000, 1000); ConstraintWidget A = new ConstraintWidget(100, 100); |