Как центрировать заголовок 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"