From 6a3ea94ae0794793c91c11ebafbd87b4a2445112 Mon Sep 17 00:00:00 2001 From: conradchen Date: Fri, 3 Dec 2021 16:12:13 +0000 Subject: [PATCH] [Snackbar] Fix maxWidth is not applied on Snackbar During a previous refactoring, the maxWidth enforcement logic was incorrectly moved to the inner layout of snackbar. Moves the logic back to the outer layout so it can be properly applied. PiperOrigin-RevId: 413938993 --- .../material/snackbar/BaseTransientBottomBar.java | 10 +++++++++- .../material/snackbar/SnackbarContentLayout.java | 10 ---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/java/com/google/android/material/snackbar/BaseTransientBottomBar.java b/lib/java/com/google/android/material/snackbar/BaseTransientBottomBar.java index 97e230e1917..449a3fc3b0a 100644 --- a/lib/java/com/google/android/material/snackbar/BaseTransientBottomBar.java +++ b/lib/java/com/google/android/material/snackbar/BaseTransientBottomBar.java @@ -376,7 +376,6 @@ protected BaseTransientBottomBar( ((SnackbarContentLayout) content) .updateActionTextColorAlphaIfNeeded(view.getActionTextColorAlpha()); ((SnackbarContentLayout) content).setMaxInlineActionWidth(view.getMaxInlineActionWidth()); - ((SnackbarContentLayout) content).setMaxWidth(view.getMaxWidth()); } view.addView(content); @@ -1222,6 +1221,15 @@ public void setOnClickListener(@Nullable OnClickListener onClickListener) { super.setOnClickListener(onClickListener); } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (maxWidth > 0 && getMeasuredWidth() > maxWidth) { + widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); diff --git a/lib/java/com/google/android/material/snackbar/SnackbarContentLayout.java b/lib/java/com/google/android/material/snackbar/SnackbarContentLayout.java index f52b283ba32..fcbc4b08050 100644 --- a/lib/java/com/google/android/material/snackbar/SnackbarContentLayout.java +++ b/lib/java/com/google/android/material/snackbar/SnackbarContentLayout.java @@ -37,7 +37,6 @@ public class SnackbarContentLayout extends LinearLayout implements ContentViewCa private TextView messageView; private Button actionView; - private int maxWidth; private int maxInlineActionWidth; public SnackbarContentLayout(@NonNull Context context) { @@ -77,11 +76,6 @@ void updateActionTextColorAlphaIfNeeded(float actionTextColorAlpha) { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - if (maxWidth > 0 && getMeasuredWidth() > maxWidth) { - widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.EXACTLY); - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - final int multiLineVPadding = getResources().getDimensionPixelSize(R.dimen.design_snackbar_padding_vertical_2lines); final int singleLineVPadding = @@ -162,8 +156,4 @@ public void animateContentOut(int delay, int duration) { public void setMaxInlineActionWidth(int width) { maxInlineActionWidth = width; } - - void setMaxWidth(int width) { - maxWidth = width; - } }