2013-04-13 13 views
9

Mam ListView, który zostanie wypełniony RelativeLayouts. Zawartość tych RelativeLayouts może się zmieniać, a tym samym odpowiednio zmieniać ich wysokość. Na każdym RelativeLayout mam mały pionowy pasek po lewej stronie układu, który pasuje do wysokości układu.Child of RelativeLayout nie wypełnia wysokości RelativeLayout

Jest to podobny wygląd do tego ->Link

Choć z jakiegoś powodu, widok obiektu, który używam nie rozwija się do wysokości układu.

Co robię źle?

<?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> 

Odpowiedz

-5

będziemy chcieli dodać layout_alignParentTop="true" i layout_alignParentBottom="true" do status - zapewni to, że widok dotyka zarówno górną i dolną post „s RelativeLayout.

+5

Nadal nie działa. To bardzo dziwne, jeśli ustawię szerokość, aby wypełnić rodzica, to działa dobrze, ale ustawienie wysokości do wypełnienia rodzica wydaje się nie odpowiadać. – vivatus

+0

Nie działa też. Ale w moim przypadku dziecko ma wysokość równą swojej zawartości i zostało dołączone do dna rodzicielskiego. – neworld

+0

nie działa dla mnie albo – Ali

0

Miał ten sam brzydki problem, który zresztą nie ma sensu. Co pracował dla mnie w końcu był zmieniając android:layout_height w tagu RelativeLayout do fill_parent jak ten

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

nadziei, że to pomoże

3

miałem podobny problem z RelativeLayout wewnątrz ScrollView. According to the documentation jest bug w (do wersji 17), które powodują błędy w mierzonej wysokości, jeśli zostaną dodane wewnątrz przewijanego kontenera (np. ListView).

Aby rozwiązać problem, należy programowo obliczyć wysokość.

Można utworzyć rozszerzoną klasę i zastąpić metodę onMeasure lub dodać OnGlobalLayoutListener do widoku rodzica.

Wybieram drugą drogę. Oto moje rozwiązanie:

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

Naprawiłem ręcznie ustawić układ podczas onLayout za nieprawidłową widzenia:

@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

miałem podobny problem wewnątrz komórek mojego RecyclerView który miał RelativeLayout jako element główny.

Obejście problemu polegało na zawijaniu dodatkowego elementu LinearLayout wokół głównego elementu RelativeLayout.

więc karta wygląda następująco:

<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> 

Źródło: https://stackoverflow.com/a/28799251/3708094

+1

layout_alignParentBottom i layout_alignParentTop parametry są zbędne, ale twoja rada bardzo pomocna. Dziękuję Ci! – Nar

+1

to jedyne rozwiązanie, które sprawdziło się u mnie. co ciekawe, użycie 'FrameLayout' nie działało, ale używanie' LinearLayout' działało. –

-1

Mój problem był następujący wiersz

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

został usunięty. Po dodaniu go działa teraz dobrze.

8

Jeśli RelativeLayout jest wewnątrz Scrollview, następnie na Scrollview trzeba dodać param fillViewPort i ustawić ją na true

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

Pracowałem dla mnie !! –

+0

To był mój problem! – rrbrambley

Powiązane problemy