From 094e3e21eac24258604d367e04286f6ed247257d Mon Sep 17 00:00:00 2001 From: dsn5ft <1420597+dsn5ft@users.noreply.github.com> Date: Thu, 28 Sep 2023 21:11:21 +0000 Subject: [PATCH] [CollapsingToolbarLayout] Fix issue where expanded text gets ellipsized too aggressively when using title fade mode and the toolbar has menu items PiperOrigin-RevId: 569287167 --- .../BaseTopAppBarCollapsingDemoFragment.java | 16 ++++++++++++++++ .../cat_topappbar_collapsing_large_fragment.xml | 2 +- .../cat_topappbar_collapsing_medium_fragment.xml | 2 +- .../catalog/topappbar/res/values/strings.xml | 6 ++++-- .../material/internal/CollapsingTextHelper.java | 4 +++- 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java b/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java index d89c07a6728..df6ad9cfac3 100644 --- a/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java +++ b/catalog/java/io/material/catalog/topappbar/BaseTopAppBarCollapsingDemoFragment.java @@ -22,6 +22,8 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.LayoutRes; @@ -32,6 +34,13 @@ /** A base fragment that displays a collapsing Top App Bar demo for the Catalog app. */ public abstract class BaseTopAppBarCollapsingDemoFragment extends DemoFragment { + @Override + public void onCreate(@Nullable Bundle bundle) { + super.onCreate(bundle); + + setHasOptionsMenu(true); + } + @NonNull @Override public View onCreateDemoView( @@ -47,6 +56,13 @@ public View onCreateDemoView( return view; } + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) { + super.onCreateOptionsMenu(menu, menuInflater); + + menuInflater.inflate(R.menu.cat_topappbar_menu, menu); + } + @Override public boolean shouldShowDefaultDemoActionBar() { return false; diff --git a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml index 0a1b190aa4a..1ff59c1f102 100644 --- a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml +++ b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_large_fragment.xml @@ -41,7 +41,7 @@ android:layout_height="?attr/actionBarSize" android:elevation="0dp" app:layout_collapseMode="pin" - app:title="@string/cat_topappbar_collapsing_demo_toolbar_title"/> + app:title="@string/cat_topappbar_collapsing_demo_toolbar_large_title"/> diff --git a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml index 8101fde9173..5d80cde4495 100644 --- a/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml +++ b/catalog/java/io/material/catalog/topappbar/res/layout/cat_topappbar_collapsing_medium_fragment.xml @@ -41,7 +41,7 @@ android:layout_height="?attr/actionBarSize" android:elevation="0dp" app:layout_collapseMode="pin" - app:title="@string/cat_topappbar_collapsing_demo_toolbar_title"/> + app:title="@string/cat_topappbar_collapsing_demo_toolbar_medium_title"/> diff --git a/catalog/java/io/material/catalog/topappbar/res/values/strings.xml b/catalog/java/io/material/catalog/topappbar/res/values/strings.xml index 68e1e9953db..3913a105e58 100644 --- a/catalog/java/io/material/catalog/topappbar/res/values/strings.xml +++ b/catalog/java/io/material/catalog/topappbar/res/values/strings.xml @@ -41,8 +41,10 @@ Regular Title Scrolling Title - - Collapsing Title + + Collapsing Title Medium Size + + Collapsing Title Large Size Edit diff --git a/lib/java/com/google/android/material/internal/CollapsingTextHelper.java b/lib/java/com/google/android/material/internal/CollapsingTextHelper.java index a9d37050669..5194ed8ec72 100644 --- a/lib/java/com/google/android/material/internal/CollapsingTextHelper.java +++ b/lib/java/com/google/android/material/internal/CollapsingTextHelper.java @@ -1026,9 +1026,11 @@ private void calculateUsingTextSize(final float fraction, boolean forceRecalcula // collapsed text size float scaledDownWidth = expandedWidth * textSizeRatio; - if (forceRecalculate) { + if (forceRecalculate || fadeModeEnabled) { // If we're forcing a recalculate during a measure pass, use the expanded width since the // collapsed width might not be ready yet + // Or if the fade mode is enabled, we can also just use the expanded width because when + // fading out/in there is not a continuous scale transition between expanded/collapsed text availableWidth = expandedWidth; } else { // If the scaled down size is larger than the actual collapsed width, we need to