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

#android #xml #android-relativelayout

#Android #xml #android-relativelayout

Вопрос:

У меня есть корневые RelativeLayout и дочерние представления.

После некоторого просмотра V1 я хочу разместить 3 просмотра: TextView TV1, TextView TV2 и ProgressBar Progress. Конечно, прогресс имеет высоту больше, чем текстовые представления. После этого 3 вида разместили другие представления.

Как я могу разместить TV1, TV2, прогресс с «центральной» линией? Без использования какого-либо дополнительного контейнера, например: LinearLayout .

введите описание изображения здесь

Комментарии:

1. Вы можете присвоить своим представлениям android:centerVertical="true" атрибут

2. почему вам не нужен контейнер? Я думаю, что вложенные макеты — это всегда хороший подход

3. @Carlos Robless, я думаю: меньше контейнеров, меньше затрат на рендеринг.

4. в любом случае, это лучшее, что вы можете сделать. Если вы все еще не хотите, вы можете вычислить высоту 3 элементов во время выполнения и добавить нужное поле программно

5. Вы пробовали что-то вроде: android:layout_alignBaseline=»@id / progress» или наоборот?

Ответ №1:

Выберите эталонное представление (скажем, ProgressBar в вашем случае) и выровняйте другие представления относительно его верхней И нижней части. Таким образом, они станут центрированными относительно его горизонтальной оси.

 android:layout_alignTop ="@ id/reference_progressbar_id"
android:layout_alignBottom ="@id/reference_progressbar_id"
  

Ответ №2:

Шаг 1 Создайте, LinearLayout который содержит эти три вида, и установите android:gravity="center" для linearlayout, подобного следующему

 <LinearLayout 
android:id="@ id/action_header_RL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" 
android:gravity="center"
>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="123"/>

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="456"/>

     <ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
</LinearLayout>
  

Комментарии:

1. спасибо, я уже знаю об этой реализации. Но я хочу использовать только корневой RelativeLayout.

2. @YShinkarev Используйте RelativeLayout как root, но внутри этого вы можете использовать LinearLayout, содержащий эти три представления.

Ответ №3:

Добавьте android:centerVertical="true" к видам, которые вы хотите центрировать, но это не гарантирует, что они не будут перекрывать любые другие виды, которые вы добавляете в макет.

Ответ №4:

сохраните это свойство с помощью tv1, tv2 и progress

< android:layout_centerVertical=»true»>

и сохранить tv1 android:layout_alignParentLeft=»true»

и tv2 to_Rightof tv1, а прогресс продолжается до_RightOf tv2

Комментарии:

1. @Mahmoud Elmorabea, @Frank N. Stein не работают, android:centerVertical потому что я использую layout_below (ниже версии V1).

Ответ №5:

     Try This Below Code:

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" >

    <TextView
        android:id="@ id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ANDROID"
        android:layout_toLeftOf="@id/TextViewValue" />

    <TextView
        android:id="@ id/TextViewValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Layout" />

    <ProgressBar
        android:id="@ id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/TextViewValue" />

</RelativeLayout>
  

Комментарии:

1. проблема вашего кода в том, что вы не используете представления выше / ниже TV / Progress.