2013-04-13 6 views
9

У меня есть ListView, который заполняется RelativeLayouts. Содержимое этих RelativeLayouts может измениться и, соответственно, изменить их высоту соответственно. На каждом RelativeLayout у меня есть небольшая вертикальная панель в левой части макета, соответствующая высоте макета.Ребенок RelativeLayout не заполняет высоту RelativeLayout

Похожая взгляд на это ->Link

Хотя по какой-то причине, вид объекта, который я использую не расширяется до высоты расположения.

Что я делаю неправильно?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/post" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/column_post_selector" 
android:orientation="horizontal" > 

<!-- Status bar (THIS ISN'T FILLING TO PARENTS' HEIGHT) --> 
<View 
    android:id="@+id/status" 
    android:layout_width="3dp" 
    android:layout_height="fill_parent" 
    android:layout_alignLeft="@id/post" 
    android:layout_marginBottom="2dp" 
    android:layout_marginTop="2dp" 
    android:background="#33B5E5" /> 

<ImageView 
    android:id="@+id/thumbnail" 
    android:layout_width="80dip" 
    android:layout_height="80dip" 
    android:layout_toRightOf="@id/status" 
    android:contentDescription="@string/empty" 
    android:layout_marginRight="5dp" 
    android:scaleType="fitStart" /> 

<!-- Title --> 

<TextView 
    android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignTop="@id/post" 
    android:layout_toRightOf="@id/thumbnail" 
    android:textColor="#ffffff" 
    android:textSize="14sp" 
    android:typeface="sans" /> 
<!-- Rightend Duration --> 

<TextView 
    android:id="@+id/date" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignTop="@id/title" 
    android:layout_marginRight="5dip" 
    android:gravity="right" 
    android:textColor="#10bcc9" 
    android:textSize="12sp" 
    android:textStyle="bold" /> 

</RelativeLayout> 

ответ

-5

Вы хотите добавить layout_alignParentTop="true" и layout_alignParentBottom="true" к status - это гарантирует, что точка зрения касается верхней и нижней части post «s RelativeLayout.

+5

Тем не менее не работает. Чрезвычайно странно, если я устанавливаю ширину для заполнения родителя, он отлично работает, но установка высоты для заполнения родителя кажется невосприимчивой. – vivatus

+0

Не работайте и я. Но в моем случае ребенок имеет высоту, равную ее содержимому, и привязан к нижней части родителя. – neworld

+0

не работает для меня – Ali

0

Была такая же надоедливая проблема, которая, кстати, не имеет смысла. То, что работало для меня в конце концов было изменение android:layout_height в RelativeLayout теге fill_parent как этот

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    ... 

надеюсь, что это помогает

3

У меня была аналогичная проблема с RelativeLayout внутри ScrollView. According to the documentation есть ошибка в RelativeLayout (до версии 17), которые вызывают ошибки в измеренной высоте, если они добавлены в прокручивающийся контейнер (например, ListView).

Чтобы решить проблему, вы должны рассчитать высоту программно.

Вы можете сделать свой расширенный класс и переопределить метод onMeasure или добавить OnGlobalLayoutListener в родительский вид.

Я выбираю второй способ. Вот мое решение:

Example

findViewById(R.id.scroll_view).getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     float topElementPosition = findViewById(R.id.top_element).getY(); 
     float bottomElementPosition = findViewById(R.id.bottom_element).getY(); 
     int bottomElementHeight = findViewById(R.id.bottom_element).getMeasuredHeight(); 
     int height = (int)(bottomElementPosition-topElementPosition+bottomElementHeight); 
     findViewById(R.id.view).setMinimumHeight(height); 
     findViewById(R.id.scroll_view).getViewTreeObserver().removeGlobalOnLayoutListener(this); 
    } 
}); 
0

Я установил вручную установить макет во onLayout для недействительных зрения:

@Override 
protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
    super.onLayout(changed, left, top, right, bottom); 

    int rootMarginRight = ((MarginLayoutParams)root.getLayoutParams()).rightMargin; 
    int paddingRight = root.getPaddingRight() + rootMarginRight; 

    //invalid view 
    actionsContainer.layout(
      right - actions.getWidth() - paddingRight, 
      0, 
      right - paddingRight, 
      getHeight() 
    ); 
} 
16

У меня была аналогичная проблема внутри клеток моего RecyclerView которые имели RelativeLayout как корневой элемент.

Обходной путь для меня был обертывание дополнительного LinearLayout вокруг элемента RelativeLayout корня.

Таким образом, вы карта выглядит следующим образом:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

     <RelativeLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
      <View 
       android:id="@+id/view_with_same_height_as_parent" 
       android:layout_width="10dp" 
       android:layout_height="fill_parent" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentTop="true"/> 
... 


    </RelativeLayout> 
</LinearLayout> 

Источник: https://stackoverflow.com/a/28799251/3708094

+1

layout_alignParentBottom и layout_alignParentTop параметры избыточны, но ваш совет очень полезен. Спасибо! – Nar

+1

Это единственное решение, которое сработало для меня. достаточно интересно, использование «FrameLayout» не сработало, но использование «LinearLayout» действительно сработало. –

-1

Моя проблема была следующая строка

android:fitsSystemWindows="true" <-- In the parent view 

был удален. Добавив его обратно, он отлично работает.

8

Если RelativeLayout находится внутри ScrollView, то на ScrollView вам нужно добавить fillViewPort параметров и установите его в true

<ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true"> 
+0

Работал для меня !! –

+0

Это была моя проблема! – rrbrambley

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