Как центрировать заголовок CollapsingToolbarLayout?

Я пробовал setExpandTitleTextAppearance, но это не сработало. Я хочу сосредоточить расширенный текст заголовка.

Ответы

Ответ 1

Существует атрибут expandedTitleGravity, который вы можете использовать с CollapsingToolbarLayout, чтобы центрировать расширенный текст заголовка. Добавьте это в свой CollapsingToolbarLayout:

app:expandedTitleGravity="bottom|center_horizontal"

Ответ 2

В моем случае использования, я установил 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 of Activity):

    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". (Подробнее об этом отражении здесь)

Протестировано на Android 5.1.1 и Android 4.3 (должно работать практически везде)

Ответ 4

Если вы пытаетесь центрировать заголовок в сложенном состоянии, вы можете использовать

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>

Ответ 5

Как сказал выше, Nguyễn Hoàng Anh, установите app:titleEnabled, чтобы false работал как шарм.

Когда эта опция включена, после некоторого копания с инспектором макета, подозрительное представление без имени всегда добавляется перед TextView внутри Toolbar, сразу после кнопки "Вверх" (если оно включено).

Таким образом, несмотря на то, что плотность макета работает правильно, некоторые подозрительные представления захватывают все лишние пробелы внутри Toolbar.

Ответ 6

Вы можете расположить заголовок в сложенном и развернутом состоянии следующими способами.

в развернутом состоянии,

app:expandedTitleGravity="center" 

в свернутом состоянии,

app:collapsedTitleGravity="center"

я думаю, что это может помочь вам

Ответ 7

app:collapsedTitleGravity="center_vertical|center_horizontal" это в сворачиваемую панель инструментов app:collapsedTitleGravity="center_vertical|center_horizontal" xml app:collapsedTitleGravity="center_vertical|center_horizontal"