Как центрировать текст на панели инструментов Android AppCompat, когда активность добавляется в задний стек?

Попытка центрировать TextView на панели инструментов Android, но когда в задний стек добавлено представление, центрирование теряется. Кажется, что задний элемент не является частью панели инструментов, и это вызывает проблему.

Вот xml для панели инструментов:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways">
<FrameLayout
android:background="@color/primary"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<!-- This is a centered title -->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:layout_gravity="center"
         android:layout_marginLeft="?attr/actionBarSize"
            android:layout_marginRight="?attr/actionBarSize"
        android:gravity="center_vertical|center_horizontal">
        <TextView
            android:id="@+id/toolbar_title"
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Blah"
            android:textSize="18dp"
            android:textColor="@color/white"
            style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" />
    </LinearLayout>
</FrameLayout>

When no back stack is centered:

По центру TextView на панели инструментов

Когда действие, добавленное в задний стек, показывает кнопку «Назад», а центрирование текста теряется:

Потеря центрирования при добавлении Activity в задний стек


person Rendy Del Rosario    schedule 03.11.2015    source источник
comment
Вы пытались использовать настраиваемый вид для панели инструментов?   -  person Arslan Ashraf    schedule 03.11.2015


Ответы (1)


Проблема заключается в неправильном восприятии центрального TexView, который у вас есть.

TextView находится в центре своего отца (LinearLayout), но НЕ находится в центре панели инструментов.

Когда вы добавляете новый элемент на панель инструментов (элемент навигации), он выталкивает FrameLayout, но TextView остается в центре своего отца LinearLayout, НО НЕ В ЦЕНТРЕ ПАНЕЛИ ИНСТРУМЕНТОВ.

TextView является элементом LinearLayout и находится в центре своего контейнера LinearLayout.

LinearLayout — это элемент FrameLayout.

FrameLayout — это элемент панели инструментов.

Я надеюсь, что это поможет вам.

person Arturo Mejia    schedule 06.11.2015
comment
Спасибо, понял, что происходит. Но как я могу отцентрировать его на панели инструментов, не могли бы вы показать пример? - person Rendy Del Rosario; 06.11.2015
comment
Лучший подход, который я могу придумать прямо сейчас, — это добавить собственную навигацию по элементам на панель инструментов, чтобы вы могли лучше контролировать макет и центрировать текстовое представление в соответствии со своими предпочтениями. Другой способ, не слишком элегантный, но работающий, заключается в том, что вы можете определить, когда элемент навигации присутствует, и добавить дополнительное поле справа от текстового представления, которое компенсирует с помощью элемента навигации, он будет выглядеть так, как будто он находится в центре. - person Arturo Mejia; 07.11.2015