From fdc34de9c9cd019d31b3f8f91d75922a4dddb51c Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Thu, 31 Dec 2020 11:17:53 -0600 Subject: [PATCH] Incorporating a minimum and maximum size for the square layout to keep images from getting too large on tablets. --- .../SquareFrameLayout.java | 35 ++++++++++++++++++- .../app/src/main/res/layout/details.xml | 5 ++- .../app/src/main/res/values/attrs.xml | 7 ++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 ActivitySceneTransitionBasic/app/src/main/res/values/attrs.xml diff --git a/ActivitySceneTransitionBasic/app/src/main/java/com/example/android/activityscenetransitionbasic/SquareFrameLayout.java b/ActivitySceneTransitionBasic/app/src/main/java/com/example/android/activityscenetransitionbasic/SquareFrameLayout.java index a5cccd34..d6b7b22c 100644 --- a/ActivitySceneTransitionBasic/app/src/main/java/com/example/android/activityscenetransitionbasic/SquareFrameLayout.java +++ b/ActivitySceneTransitionBasic/app/src/main/java/com/example/android/activityscenetransitionbasic/SquareFrameLayout.java @@ -17,6 +17,8 @@ package com.example.android.activityscenetransitionbasic; import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; import android.util.AttributeSet; import android.widget.FrameLayout; @@ -25,6 +27,8 @@ */ public class SquareFrameLayout extends FrameLayout { + private int mMaxWidth, mMaxHeight; + public SquareFrameLayout(Context context) { this(context, null); } @@ -35,6 +39,24 @@ public SquareFrameLayout(Context context, AttributeSet attrs) { public SquareFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); + + TypedArray a = context.getTheme().obtainStyledAttributes( + attrs, R.styleable.SquareFrameLayout, 0, 0 + ); + try { + mMaxWidth = a.getDimensionPixelSize(R.styleable.SquareFrameLayout_maxWidth, Integer.MAX_VALUE); + mMaxHeight = a.getDimensionPixelSize(R.styleable.SquareFrameLayout_maxHeight, Integer.MAX_VALUE); + } finally { + a.recycle(); + } + } + + public int getMaximumWidth() { + return mMaxWidth; + } + + public int getMaximumHeight() { + return mMaxHeight; } @Override @@ -52,7 +74,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { return; } - final int size; + int size; if (widthSize == 0 || heightSize == 0) { // If one of the dimensions has no restriction on size, set both dimensions to be the // on that does @@ -63,6 +85,17 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { size = Math.min(widthSize, heightSize); } + // bound the size by the view's min and max dimensions + final int maxSize = Math.min(getMaximumWidth(), getMaximumHeight()); + if (size > maxSize) { + size = maxSize; + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + final int minSize = Math.max(getMinimumWidth(), getMinimumHeight()); + if (size < minSize) { + size = minSize; + } + } + final int newMeasureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY); super.onMeasure(newMeasureSpec, newMeasureSpec); } diff --git a/ActivitySceneTransitionBasic/app/src/main/res/layout/details.xml b/ActivitySceneTransitionBasic/app/src/main/res/layout/details.xml index f387f7e8..bc8a8f63 100644 --- a/ActivitySceneTransitionBasic/app/src/main/res/layout/details.xml +++ b/ActivitySceneTransitionBasic/app/src/main/res/layout/details.xml @@ -16,6 +16,7 @@ --> @@ -26,7 +27,9 @@ + android:layout_height="wrap_content" + android:minHeight="100dp" + app:maxHeight="400dp"> + + + + + +