如何使CollapsingToolbarLayout的标题居中?

Jav*_*tri 22 android android-collapsingtoolbarlayout

我试过了setExpandTitleTextAppearance,但没办法.我想将扩展的标题文本居中.

and*_*lic 67

expandedTitleGravity您可以将一个属性与CollapsingToolbarLayout一起使用,以使展开的标题文本居中.将其添加到您的CollapsingToolbarLayout:

app:expandedTitleGravity="bottom|center_horizontal"
Run Code Online (Sandbox Code Playgroud)

  • 完美答案:) (4认同)
  • @androholic,“app:collapsedTitleGravity=”center_horizo​​ntal`怎么样,它实际上不起作用 (3认同)

小智 20

在我的用例中,我设置app:titleEnabled为false,无论如何我都不需要它.之后,我的引力在工具栏布局中得到了正确的尊重.


Sha*_*shi 8

您可以通过以下方式在折叠和展开状态下安排标题的位置

在展开状态下,

app:expandedTitleGravity="center" 
Run Code Online (Sandbox Code Playgroud)

在折叠状态下,

app:collapsedTitleGravity="center"
Run Code Online (Sandbox Code Playgroud)

我想这可能对你有帮助

  • 问题是,在“折叠”状态下,标题不正确地水平居中。左侧有一个填充/边距。*编辑*:事实证明,您可以通过将“android:paddingEnd:24dp”添加到“CollapsingToolbarLayout”来修复它 (4认同)

Kon*_*nov 4

@Javed,如果我错了,请纠正我,你想让标题在工具栏中居中,然后 CollapsingToolbarLayout 折叠起来,你的布局是这样的,对吧?

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginStart="48dp"
        app:expandedTitleMarginEnd="64dp"
        android:fitsSystemWindows="true">

        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop"
            android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax"/>

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_collapseMode="pin" />

    </android.support.design.widget.CollapsingToolbarLayout>
Run Code Online (Sandbox Code Playgroud)

然后你可以做这个技巧(我在 Activity 的 onCreate 中做):

    try {
        Field declaredField = toolbar.getClass().getDeclaredField("mTitleTextView");
        declaredField.setAccessible(true);
        TextView titleTextView = (TextView) declaredField.get(toolbar);
        ViewGroup.LayoutParams layoutParams = titleTextView.getLayoutParams();
        layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
        titleTextView.setLayoutParams(layoutParams);
        titleTextView.setGravity(Gravity.CENTER_HORIZONTAL);
    } catch (Exception e) {
        //"Error!"
    }
Run Code Online (Sandbox Code Playgroud)

关键是Toolbar中的TextView有宽度属性“Wrap Content”,所以我们需要将其更改为“Match Parent”。(在此处查看有关此反思的更多信息)

在 Android 5.1.1 和 Android 4.3 上测试(应该几乎可以在任何地方工作)