android Collapsingtoolbarlayout 在需要时显示全文

android Collapsingtoolbarlayout show full text when needed

您好,我有一个使用 Collapsingtoolbarlayout 的 android 应用程序。 Collapsingtoolbarlayout 的标题将是之前文章的标题 activity/fragment(我怎样才能使 Collapsingtoolbarlayout 在需要时显示完整标题(调整字体大小,增加 space)?

目前,我正在使用这些代码。如何修改代码以正确显示标题?非常感谢任何帮助。谢谢

Activity activity = this.getActivity();
        CollapsingToolbarLayout appBarLayout = (CollapsingToolbarLayout) activity.findViewById(R.id.toolbar_layout);
        if (appBarLayout != null) {
            appBarLayout.setTitle(topStory.getTitle());
            appBarLayout.setExpandedTitleTextAppearance(View.NO_ID);
            appBarLayout.setCollapsedTitleTypeface(Typeface.SANS_SERIF);
            appBarLayout.setTitleEnabled(true);
        }

要更改文本大小,您需要将此添加到 CollapsingToolbarLayout:

   app:expandedTitleTextAppearance="@style/TextAppearance.AppCompat.Title">

或在Java中:

mCollapsingToolbarLayout.setTitle(getTitle());
mCollapsingToolbarLayout.setExpandedTitleTextAppearance(android.R.stlye.);
mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(android.R.style.);

要动态调整大小以适应文章布局,您有两种选择: 您将 textSize 设置为一个大小,这将允许每个可能的标题完整显示(如果您已经知道每个标题)

或者您检查标题有多少个字符并更改 CollapsingToolbarLayout 的 textAppeareance

我简直不敢相信,四年后我仍在努力让 CollapsingToolbarLayout 处理这个问题。具体来说,我们需要展开后的高度 CollapsingToolbarLayout 来包裹展开后标题的大小,而不包含任何包含的图像或其他内容。

为了实现这一点,我不得不在 CollapsingToolbarLayout 中创建一个伪造的 TextView 来模仿扩展标题的外观和内容,以便 CollapsingToolbarLayout 计算其扩展基于它的高度。此 TextView 保持不可见,因此我们仍然可以在其折叠和展开标题之间使用 CollapsingToolbarLayout 提供的动画。

这里是 XML 供您使用:

<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:liftOnScroll="true">

    <com.google.android.material.appbar.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:collapsedTitleTextAppearance="@style/OmegaHeadingMedium"
        app:expandedTitleGravity="bottom"
        app:expandedTitleMarginBottom="@dimen/spacer_small"
        app:expandedTitleMarginEnd="@dimen/spacer_grid"
        app:expandedTitleMarginStart="@dimen/spacer_grid"
        app:expandedTitleMarginTop="?actionBarSize"
        app:expandedTitleTextAppearance="@style/OmegaHeadingLarge"
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
        app:maxLines="3"
        tools:title="Title">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            app:layout_collapseMode="pin"
            app:titleMarginEnd="@dimen/spacer_small" />

        <!-- This title is used to dynamically calculate the height
            of the collapsing toolbar. Styling should match that of
            the expanded title appearance. -->
        <TextView
            android:id="@+id/txt_fake_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_marginHorizontal="@dimen/spacer_grid"
            android:layout_marginTop="?actionBarSize"
            android:layout_marginBottom="@dimen/spacer_xsmall"
            android:textAppearance="@style/OmegaHeadingLarge"
            android:visibility="invisible"
            tools:text="Really really really really really really really really long title"
            tools:visibility="visible" />

    </com.google.android.material.appbar.CollapsingToolbarLayout>

</com.google.android.material.appbar.AppBarLayout>

(请记住 XML 中的样式、尺寸和其他属性仅用于演示)

下面是您将如何在 Kotlin 中使用它:

collapsing_toolbar.title = "Title"
txt_fake_title.text = "Title"