2014-12-12 5 views
4

У меня есть RelativeLayout с тремя видами. Оба TextViews должны быть справа от ImageView, а секунды должны быть ниже первого TextView.android: layout_below не работает должным образом

Код:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#bdbdbd" 
    android:paddingBottom="15dp" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:paddingTop="15dp" > 

    <ImageView 
     android:id="@+id/avatar" 
     android:layout_width="64dp" 
     android:layout_height="64dp" 
     android:layout_centerVertical="true" 
     android:src="@drawable/default_avatar" /> 

    <TextView 
     android:id="@+id/username" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@id/avatar" 
     android:text="Chris" 
     android:textSize="16sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/university" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/username" 
     android:layout_toRightOf="@id/avatar" 
     android:text="Oxford" 
     android:textSize="13sp" /> 
</RelativeLayout> 

Результат: enter image description here

После удаления android:layout_centerVertical="true" с первого TextView, все работает, как и ожидалось (кроме того, что это не по вертикали). enter image description here

Почему это и как я могу сделать первый TextView вертикальный по центру?

+0

Я просто хочу, чтобы первая была вертикально вертикальной, а вторая - ниже. Центрирование обоих TextViews будет выглядеть как первый экран (что бесполезно). – Chris

+0

Вы пытались добавить layout_below = "@ id/username" во второй TextView? – sthor69

+0

У меня есть? См. Код, пожалуйста. – Chris

ответ

6

По какой-то причине параметр RelativeLayout height задает проблему. Попробуйте установить его на 94dp (64 из изображения + 15 нижнего дополнения + 15 верхнего заполнения). Это должно решить проблему

+0

Спасибо, кажется, хорошо работает. – Chris

+0

Рад, что я могу помочь –

1

@f. de является правильным. Проблема в том, что android:layout_height="wrap_content", поскольку высота относительной компоновки определяется мной, она настроена на контент, чтобы контент был вертикально центрирован на основе его высоты. Вам необходимо установить это значение match_parent или фиксированное значение.

0

Поскольку вы пытаетесь разместить оба центра TextViews по вертикали, они перекрываются. Используйте атрибут padding для этого преимущества. Чтобы выровнять их по мере необходимости, используйте этот код.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#bdbdbd" 
    android:paddingBottom="15dp" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:paddingTop="15dp" > 

<ImageView 
    android:id="@+id/avatar" 
    android:layout_width="64dp" 
    android:layout_height="64dp" 
    android:layout_centerVertical="true" 
    android:src="@drawable/default_avatar" /> 

<TextView 
    android:id="@+id/username" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_toRightOf="@id/avatar" 
    android:text="Chris" 
    android:paddingBottom="7dp" 
    android:textSize="16sp" 
    android:textStyle="bold" /> 

<TextView 
    android:id="@+id/university" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/username" 
    android:layout_toRightOf="@id/avatar" 
    android:paddingTop="7dp" 
    android:text="Oxford" 
    android:textSize="13sp" /> 
</RelativeLayout> 

Я хочу это решает проблему ...

0

Вы также можете обернуть ваши данные, в вашем случае имя и университета в другой RelativeLayout или любой другой ViewGroup и сделать его выравнивание по центру.

Как этого

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#bdbdbd" 
    android:paddingBottom="15dp" 
    android:paddingLeft="5dp" 
    android:paddingRight="5dp" 
    android:paddingTop="15dp"> 

    <ImageView 
     android:id="@+id/avatar" 
     android:layout_width="64dp" 
     android:layout_height="64dp" 
     android:layout_centerVertical="true" 
     android:src="@drawable/default_avatar" /> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="5dp" 
     android:layout_marginStart="5dp" 
     android:layout_toEndOf="@id/avatar" 
     android:layout_toRightOf="@id/avatar"> 

     <TextView 
      android:id="@+id/username" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Chris" 
      android:textSize="16sp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/university" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/username" 
      android:text="Oxford" 
      android:textSize="13sp" /> 
    </RelativeLayout> 
</RelativeLayout> 

Это имеет смысл, чтобы взгляды связанных групп (TextViews), а также он производит лучший результат, поскольку весь контейнер совмещен центр, в своем изначальном виде примера Name центрируется по вертикали, но другой вид находится ниже него, и это заставляет его выглядеть не так хорошо, как в случае контейнера, где базовый уровень - это виртуальный центр контейнера.

Смежные вопросы