Подтвердить что ты не робот

Выровнять левый край до центра - RelativeLayout

У меня есть следующее требование (значительно упрощенное):

enter image description here

текст 2 должен начинаться с ЦЕНТРА экрана.

Я мог добиться этого только с помощью LinearLayout:

<more_code></more_code><LinearLayout
                                    android:baselineAligned="false"
                                    android:weightSum="2"
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content">

                                <LinearLayout
                                        android:layout_weight="1"
                                        android:orientation="horizontal"
                                        android:layout_width="0dp"
                                        android:layout_height="wrap_content">
                                    <TextView
                                            android:layout_width="wrap_content"
                                            android:layout_height="wrap_content"
                                            android:text="test one"/>
                                    <TextView
                                            android:layout_width="wrap_content"
                                            android:layout_height="wrap_content"
                                            android:text="test two"/>
                                </LinearLayout>

                                <LinearLayout
                                        android:layout_weight="1"
                                        android:orientation="horizontal"
                                        android:layout_width="0dp"
                                        android:layout_height="wrap_content">
                                    <TextView
                                            android:layout_width="wrap_content"
                                            android:layout_height="wrap_content"
                                            android:text="test three"/>

                                    <TextView
                                            android:layout_width="wrap_content"
                                            android:layout_height="wrap_content"
                                            android:text="test four"/>
                                </LinearLayout>
                            </LinearLayout><more_code></more_code>

Так как у меня уже слишком много вложенных представлений (таким образом, получение myfile.xml имеет более 10 уровней, что плохо для предупреждения о производительности), я хотел бы знать, могу ли я получить тот же результат с одним RelativeLayout. Я прошел через документацию, но я не смог найти свойство, которое позволяет мне это.

4b9b3361

Ответ 1

Это очень просто, если вы принимаете 1 пустой вид 0dp на 0dp как служебные. По-моему, это лучше, чем слишком много вложенных представлений, но это может служить ссылкой для других представлений.

Используйте пустой Space (0x0 px). Если вы центрируете этот Space по горизонтали, вы можете использовать его как ссылку:

<RelativeLayout>

    <!-- Empty layout (0x0 dp) centered horizontally -->
    <Space android:id="@+id/dummy" 
        android:layout_width="0dp" 
        android:layout_height="0dp"
        android:layout_centerHorizontal="true" 
        android:visibility="invisible"/>

    <!-- Align to parent left -->
    <TextView
        android:id="@+id/test_one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="test one"/>

    <!-- to right of the previous one, and to left of the dummy -->
    <TextView
        android:id="@+id/test_two"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/test_one"
        android:layout_toLeftOf="@+id/dummy"
        android:text="test two"/>

    <!-- Align to right of the dummy -->
    <TextView
        android:id="@+id/test_three"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/dummy"
        android:text="test three"/>

    <!-- Align to right of the previous one, and parent right -->
    <TextView
        android:id="@+id/test_four"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/test_three"
        android:layout_alignParentRight="true"
        android:text="test four"/>

</RelativeLayout>

Ответ 2

Вы можете выровнять его с родительским левым, используя alignParentLeft = "true"

Ответ 3

Попробуйте использовать код ниже (непроверенный):

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dip" >

        <!--  ListRow Left side text-->

        <TextView
            android:id = "@+id/lefttextview" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="text1"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"/>
        <!-- center -->
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/lefttextview"
            android:text="text2"/>


    </RelativeLayout>

Ответ 4

Не удалось понять точную проблему. То, что вы хотите, это text2 из центра, поэтому сначала используйте относительный макет, так как его легче делать места размещения в относительной компоновке, а не в линейном макете, который устанавливает элементы управления один за другим с определенной ориентацией. И в этом вы можете использовать свойство center_in_parent для true, а затем выровнять текст1 влево. Надеюсь, это ответит на вашу проблему.

Ответ 5

Возможно, вам придется использовать фиктивный View с android:layout_centerHorizontal="true" и android:layout_width="0dp" с идентификатором. Затем добавьте свой TextView с атрибутом android:layout_toRightOf="@id/id_of_dummy_view", чтобы поместить его. Там может быть более простой способ сделать это, но я не могу проверить на данный момент.