Merge "Update dynamic height adjusting" into sc-dev

This commit is contained in:
Mill Chen
2021-07-02 18:48:50 +00:00
committed by Android (Google) Code Review
4 changed files with 13 additions and 141 deletions

View File

@@ -36,13 +36,15 @@
<com.google.android.material.appbar.CollapsingToolbarLayout <com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar" android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_one_line_height" android:layout_height="@dimen/settingslib_toolbar_layout_height"
android:clipToPadding="false" android:clipToPadding="false"
app:forceApplySystemWindowInsetTop="true"
app:extraMultilineHeightEnabled="true"
app:contentScrim="?androidprv:attr/colorSurfaceHeader" app:contentScrim="?androidprv:attr/colorSurfaceHeader"
app:maxLines="3" app:maxLines="3"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
app:scrimAnimationDuration="50" app:scrimAnimationDuration="50"
app:scrimVisibleHeightTrigger="@dimen/scrim_visible_height_trigger" app:scrimVisibleHeightTrigger="@dimen/settingslib_scrim_visible_height_trigger"
app:statusBarScrim="@null" app:statusBarScrim="@null"
app:titleCollapseMode="fade" app:titleCollapseMode="fade"
app:collapsedTitleTextAppearance="@style/CollapsingToolbarTitle.Collapsed" app:collapsedTitleTextAppearance="@style/CollapsingToolbarTitle.Collapsed"

View File

@@ -16,12 +16,8 @@
--> -->
<resources> <resources>
<!-- Collapsing toolbar layout dimensions --> <!-- Collapsing toolbar layout dimensions -->
<dimen name="toolbar_one_line_height">216dp</dimen> <dimen name="settingslib_toolbar_layout_height">179dp</dimen>
<dimen name="toolbar_two_lines_height">260dp</dimen> <dimen name="settingslib_scrim_visible_height_trigger">137dp</dimen>
<dimen name="toolbar_three_lines_height">304dp</dimen>
<dimen name="scrim_visible_height_trigger">174dp</dimen>
<dimen name="scrim_visible_height_trigger_two_lines">218dp</dimen>
<dimen name="scrim_visible_height_trigger_three_lines">262dp</dimen>
<dimen name="expanded_title_margin_start">24dp</dimen> <dimen name="expanded_title_margin_start">24dp</dimen>
<dimen name="expanded_title_margin_end">24dp</dimen> <dimen name="expanded_title_margin_end">24dp</dimen>
</resources> </resources>

View File

@@ -36,19 +36,14 @@ import com.google.android.material.resources.TextAppearanceConfig;
* A base Activity that has a collapsing toolbar layout is used for the activities intending to * A base Activity that has a collapsing toolbar layout is used for the activities intending to
* enable the collapsing toolbar function. * enable the collapsing toolbar function.
*/ */
public class CollapsingToolbarBaseActivity extends FragmentActivity implements public class CollapsingToolbarBaseActivity extends FragmentActivity {
AppBarLayout.OnOffsetChangedListener {
private static final int TOOLBAR_MAX_LINE_NUMBER = 2;
private static final int FULLY_EXPANDED_OFFSET = 0;
private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f; private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f;
private static final String KEY_IS_TOOLBAR_COLLAPSED = "is_toolbar_collapsed";
@Nullable @Nullable
private CollapsingToolbarLayout mCollapsingToolbarLayout; private CollapsingToolbarLayout mCollapsingToolbarLayout;
@Nullable @Nullable
private AppBarLayout mAppBarLayout; private AppBarLayout mAppBarLayout;
private boolean mIsToolbarCollapsed;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -58,14 +53,9 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements
super.setContentView(R.layout.collapsing_toolbar_base_layout); super.setContentView(R.layout.collapsing_toolbar_base_layout);
mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar); mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
mAppBarLayout = findViewById(R.id.app_bar); mAppBarLayout = findViewById(R.id.app_bar);
if (mAppBarLayout != null) { if (mCollapsingToolbarLayout != null) {
mAppBarLayout.addOnOffsetChangedListener(this); mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
} }
if (savedInstanceState != null) {
mIsToolbarCollapsed = savedInstanceState.getBoolean(KEY_IS_TOOLBAR_COLLAPSED);
}
initCollapsingToolbar();
disableCollapsingToolbarLayoutScrollingBehavior(); disableCollapsingToolbarLayoutScrollingBehavior();
final Toolbar toolbar = findViewById(R.id.action_bar); final Toolbar toolbar = findViewById(R.id.action_bar);
@@ -125,23 +115,6 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements
return true; return true;
} }
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int offset) {
if (offset == FULLY_EXPANDED_OFFSET) {
mIsToolbarCollapsed = false;
} else {
mIsToolbarCollapsed = true;
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (isChangingConfigurations()) {
outState.putBoolean(KEY_IS_TOOLBAR_COLLAPSED, mIsToolbarCollapsed);
}
}
/** /**
* Returns an instance of collapsing toolbar. * Returns an instance of collapsing toolbar.
*/ */
@@ -174,43 +147,4 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements
}); });
params.setBehavior(behavior); params.setBehavior(behavior);
} }
@SuppressWarnings("RestrictTo")
private void initCollapsingToolbar() {
if (mCollapsingToolbarLayout == null || mAppBarLayout == null) {
return;
}
mCollapsingToolbarLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
v.removeOnLayoutChangeListener(this);
if (mIsToolbarCollapsed) {
return;
}
final int count = mCollapsingToolbarLayout.getLineCount();
if (count > TOOLBAR_MAX_LINE_NUMBER) {
final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams();
lp.height = getResources()
.getDimensionPixelSize(R.dimen.toolbar_three_lines_height);
mCollapsingToolbarLayout.setScrimVisibleHeightTrigger(
getResources().getDimensionPixelSize(
R.dimen.scrim_visible_height_trigger_three_lines));
mCollapsingToolbarLayout.setLayoutParams(lp);
mCollapsingToolbarLayout
.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
} else if (count == TOOLBAR_MAX_LINE_NUMBER) {
final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams();
lp.height = getResources()
.getDimensionPixelSize(R.dimen.toolbar_two_lines_height);
mCollapsingToolbarLayout.setScrimVisibleHeightTrigger(
getResources().getDimensionPixelSize(
R.dimen.scrim_visible_height_trigger_two_lines));
mCollapsingToolbarLayout.setLayoutParams(lp);
mCollapsingToolbarLayout
.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
}
}
});
}
} }

View File

@@ -34,12 +34,9 @@ import com.google.android.material.appbar.CollapsingToolbarLayout;
/** /**
* A base fragment that has a collapsing toolbar layout for enabling the collapsing toolbar design. * A base fragment that has a collapsing toolbar layout for enabling the collapsing toolbar design.
*/ */
public abstract class CollapsingToolbarBaseFragment extends Fragment implements public abstract class CollapsingToolbarBaseFragment extends Fragment {
AppBarLayout.OnOffsetChangedListener {
private static final int TOOLBAR_MAX_LINE_NUMBER = 2; private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f;
private static final int FULLY_EXPANDED_OFFSET = 0;
private static final String KEY_IS_TOOLBAR_COLLAPSED = "is_toolbar_collapsed";
@Nullable @Nullable
private CoordinatorLayout mCoordinatorLayout; private CoordinatorLayout mCoordinatorLayout;
@@ -51,7 +48,6 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
private Toolbar mToolbar; private Toolbar mToolbar;
@NonNull @NonNull
private FrameLayout mContentFrameLayout; private FrameLayout mContentFrameLayout;
private boolean mIsToolbarCollapsed;
@Nullable @Nullable
@Override @Override
@@ -62,13 +58,9 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
mCoordinatorLayout = view.findViewById(R.id.content_parent); mCoordinatorLayout = view.findViewById(R.id.content_parent);
mCollapsingToolbarLayout = view.findViewById(R.id.collapsing_toolbar); mCollapsingToolbarLayout = view.findViewById(R.id.collapsing_toolbar);
mAppBarLayout = view.findViewById(R.id.app_bar); mAppBarLayout = view.findViewById(R.id.app_bar);
if (mAppBarLayout != null) { if (mCollapsingToolbarLayout != null) {
mAppBarLayout.addOnOffsetChangedListener(this); mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
} }
if (savedInstanceState != null) {
mIsToolbarCollapsed = savedInstanceState.getBoolean(KEY_IS_TOOLBAR_COLLAPSED);
}
initCollapsingToolbar();
disableCollapsingToolbarLayoutScrollingBehavior(); disableCollapsingToolbarLayoutScrollingBehavior();
mToolbar = view.findViewById(R.id.action_bar); mToolbar = view.findViewById(R.id.action_bar);
mContentFrameLayout = view.findViewById(R.id.content_frame); mContentFrameLayout = view.findViewById(R.id.content_frame);
@@ -82,23 +74,6 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
requireActivity().setActionBar(mToolbar); requireActivity().setActionBar(mToolbar);
} }
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (getActivity().isChangingConfigurations()) {
outState.putBoolean(KEY_IS_TOOLBAR_COLLAPSED, mIsToolbarCollapsed);
}
}
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int offset) {
if (offset == FULLY_EXPANDED_OFFSET) {
mIsToolbarCollapsed = false;
} else {
mIsToolbarCollapsed = true;
}
}
/** /**
* Return an instance of CoordinatorLayout. * Return an instance of CoordinatorLayout.
*/ */
@@ -147,39 +122,4 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
}); });
params.setBehavior(behavior); params.setBehavior(behavior);
} }
@SuppressWarnings("RestrictTo")
private void initCollapsingToolbar() {
if (mCollapsingToolbarLayout == null || mAppBarLayout == null) {
return;
}
mCollapsingToolbarLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
v.removeOnLayoutChangeListener(this);
if (mIsToolbarCollapsed) {
return;
}
final int count = mCollapsingToolbarLayout.getLineCount();
if (count > TOOLBAR_MAX_LINE_NUMBER) {
final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams();
lp.height = getResources()
.getDimensionPixelSize(R.dimen.toolbar_three_lines_height);
mCollapsingToolbarLayout.setScrimVisibleHeightTrigger(
getResources().getDimensionPixelSize(
R.dimen.scrim_visible_height_trigger_three_lines));
mCollapsingToolbarLayout.setLayoutParams(lp);
} else if (count == TOOLBAR_MAX_LINE_NUMBER) {
final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams();
lp.height = getResources()
.getDimensionPixelSize(R.dimen.toolbar_two_lines_height);
mCollapsingToolbarLayout.setScrimVisibleHeightTrigger(
getResources().getDimensionPixelSize(
R.dimen.scrim_visible_height_trigger_two_lines));
mCollapsingToolbarLayout.setLayoutParams(lp);
}
}
});
}
} }