Android: gravity = "center_vertical" не работает с RelativeLayout - ScrollView - TableLayout / TableRow - TextView - PullRequest
0 голосов
/ 22 апреля 2019

Мой XML-файл экрана Activity_main создается с использованием RelativeView с ScrollView, который содержит TableLayout / TableRows, которые инкапсулируют четыре TextView. Я центрировал каждую из TableRows, используя android: gravity = "center | center_vertical". Когда я запускаю приложение, на экране отображается текст в каждой строке, центрированный по вертикали. Когда я обновляю экран, текст смещается вверх до верхней части экрана.

Я просмотрел stackoverflow и другие сайты и нашел разные частичные решения - ни одно из них не относится ко мне Как правило, потому что я не могу перейти от RelativeView к LinearView.

Что странно в этой ситуации, так это то, что она возникла из-за того, что мне приходилось включать строку android: layout_width = "0dp" в каждом TextView, чтобы android: layout_weight работал правильно (это было предложенное мной решение). Когда я исключаю строку android: layout_width = "0dp", текст в каждой строке выравнивается правильно.

Так в чем же проблема с включением android: layout_width = "0dp" в мой XML-файл, который вызывает смещение текста вверх при обновлении?

Я попытался заменить RelativeLayout на LinearLayout. Это не будет работать для моего приложения. Я попытался удалить Android: layout_width = "0dp". Мне это нужно для того, чтобы заставить работу макета работать. Я включил и исключил Android: gravity = "center_vertical" без эффекта.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" > 

...

   <ScrollView
        android:id="@+id/calcTableLayout"
        android:visibility="visible"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:fillViewport="true"
        android:layout_below="@+id/calcHeaderLayout"
        android:layout_above="@+id/bottomMenuLayout"
        android:fadingEdge="none">

        <TableLayout
            android:id="@+id/tableLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="0dp" >

            <TableRow
                android:id="@+id/tableRow_D"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:weightSum="40" >

                <TextView
                    android:id="@+id/text_D_label"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="19"
                    android:background="@color/defaultTableBackground1"
                    android:gravity="start|center_vertical"
                    android:minHeight="@dimen/tblMinRowSize"
                    android:paddingStart="12dp"
                    android:paddingEnd="0dp"
                    android:text="@string/loads_D"
                    android:textColor="@color/defaultTableText1"
                    android:textSize="@dimen/tblFontSize"
                    android:visibility="visible" />

                <TextView
                    android:id="@+id/text_D_ULoad"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="8"
                    android:background="@color/defaultTableBackground1"
                    android:gravity="end|center_vertical"
                    android:minHeight="@dimen/tblMinRowSize"
                    android:paddingStart="0dp"
                    android:paddingEnd="10dp"
                    android:text="@string/zero_value"
                    android:textColor="@color/defaultTableText1"
                    android:textSize="@dimen/tblFontSize"
                    android:visibility="visible" />

                <TextView
                    android:id="@+id/text_D_Factor"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="5"
                    android:background="@color/defaultTableBackground1"
                    android:gravity="center_horizontal|center_vertical"
                    android:minHeight="@dimen/tblMinRowSize"
                    android:paddingStart="0dp"
                    android:paddingEnd="0dp"
                    android:text="@string/zero_value_3_digit"
                    android:textColor="@color/defaultTableText1"
                    android:textSize="@dimen/tblFontSize"
                    android:visibility="visible" />

                <TextView
                    android:id="@+id/text_D_FLoad"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="8"
                    android:background="@color/defaultTableBackground1"
                    android:gravity="end|center_vertical"
                    android:minHeight="@dimen/tblMinRowSize"
                    android:paddingStart="0dp"
                    android:paddingEnd="12dp"
                    android:text="@string/zero_value"
                    android:textColor="@color/defaultTableText1"
                    android:textSize="@dimen/tblFontSize"
                    android:visibility="visible" />
            </TableRow>

        </TableLayout>

    </ScrollView>

</RelativeLayout>

...

Текст в каждом из TextViews в TableRows выравнивается по вертикальному центру при запуске приложения. Но затем при обновлении все четыре TextViews (или, по крайней мере, текст в TextViews) перемещаются в верхнюю часть TextView.

...