如何使CollapsingToolbarLayout的标题居中?

问题描述 投票:21回答:7

我试过setExpandTitleTextAppearance,但它没有用。我想将扩展的标题文本居中。

android android-collapsingtoolbarlayout
7个回答
64
投票

有一个属性expandedTitleGravity,您可以使用CollapsingToolbarLayout来扩展标题文本的中心。将其添加到您的CollapsingToolbarLayout:

app:expandedTitleGravity="bottom|center_horizontal"

16
投票

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


3
投票

@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>

然后你可以做这个技巧(我在活动的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!"
    }

关键是工具栏中的TextView具有宽度属性“Wrap Content”,因此我们需要将其更改为“Match Parent”。 (查看有关此反射的更多信息here

在Android 5.1.1和Android 4.3上测试过(应该可以在任何地方使用)


2
投票

如果您尝试将标题置于折叠状态,您可以使用

android:paddingEnd="70dp"
android:paddingRight="70dp"

像这样:

<android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingEnd="70dp"
            android:paddingRight="70dp"
            app:collapsedTitleGravity="center_horizontal"        
            app:expandedTitleGravity="start"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

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

            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.CollapsingToolbarLayout>

1
投票

正如NguyễnHoàngAnh所说,将app:titleEnabled设为假就像魅力一样。

启用该选项后,在使用布局检查器进行一些挖掘之后,总是在TextView内部的Toolbar前面添加可疑的未命名视图,就在“向上”按钮之后(如果已启用)。

因此,即使布局重力正常工作,一些可疑视图也会占据Toolbar内部的所有额外空间。


1
投票

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

处于扩张状态

app:expandedTitleGravity="center" 

处于崩溃状态,

app:collapsedTitleGravity="center"

我想这可能会对你有所帮助


0
投票

将此包含在折叠工具栏xml中,用于折叠:app:collapsedTitleGravity="center_vertical|center_horizontal"

扩大app:expandedTitleGravity="center_vertical|center_horizontal"

© www.soinside.com 2019 - 2024. All rights reserved.