Выровнять левый край до центра - 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. Я прошел через документацию, но я не смог найти свойство, которое позволяет мне это.
Ответы
Ответ 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"
, чтобы поместить его. Там может быть более простой способ сделать это, но я не могу проверить на данный момент.