2013-04-13 8 views
9

Ho un ListView che viene popolato con RelativeLayouts. Il contenuto di questi RelativeLayouts può cambiare e quindi modificare la loro altezza rispettivamente. Su ogni RelativeLayout, ho una piccola barra verticale sul lato sinistro del layout che corrisponde all'altezza del layout.Child of RelativeLayout non sta riempiendo l'altezza del RelativeLayout

E 'un aspetto simile a questo ->Link

Anche se per qualche motivo, l'oggetto View che sto usando non è in espansione per l'altezza del layout.

Cosa sto sbagliando?

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

risposta

-5

Ti consigliamo di aggiungere layout_alignParentTop="true" e layout_alignParentBottom="true"-status - questo farà sì che la vista tocca sia la parte superiore e inferiore del post s' RelativeLayout.

+5

Ancora non funziona. È estremamente strano, se imposto la larghezza per riempire il genitore funziona bene, ma impostare l'altezza per riempire il genitore sembra non rispondere. – vivatus

+0

Non lavorare neanche io. Ma nel mio caso il bambino ha altezza uguale al suo contenuto ed è stato attaccato al fondo genitore. – neworld

+0

non funziona per me o – Ali

0

Aveva lo stesso fastidioso problema che tra l'altro non ha senso. Quello che ha funzionato per me alla fine è stato cambiare il android:layout_height in tag RelativeLayout a fill_parent come questo

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

Spero che questo aiuti

3

Ho avuto un problema simile con un RelativeLayout all'interno di un ScrollView. According to the documentation c'è un errore in RelativeLayout (fino alla versione 17) che causa errori di altezza misurata se viene aggiunto all'interno del contenitore a scorrimento (come ListView).

Quindi per risolvere il problema è necessario calcolare l'altezza a livello di codice.

È possibile effettuare la classe estesa e ignorare il metodo onMeasure o aggiungere uno OnGlobalLayoutListener alla visualizzazione padre.

Scelgo il secondo modo. Qui è la mia soluzione:

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

ho fissato dal layout di impostare manualmente durante onLayout per la vista non valida:

@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

ho avuto un problema simile all'interno delle cellule del mio RecyclerView che avevano una RelativeLayout come elemento radice.

Una soluzione per me era il wrapping di un LinearLayout extra attorno all'elemento RelativeLayout di root.

Quindi scheda si presenta come:

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

Fonte: https://stackoverflow.com/a/28799251/3708094

+1

layout_alignParentBottom e layout_alignParentTop i parametri sono ridondanti, ma il tuo consiglio molto utile. Grazie! – Nar

+1

questa è l'unica soluzione che ha funzionato per me. abbastanza interessante, l'uso di un 'FrameLayout' non ha funzionato, ma l'uso di' LinearLayout' ha funzionato. –

-1

Il mio problema era la seguente riga

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

è stato rimosso. Dopo averlo aggiunto, ora funziona bene.

8

Se il RelativeLayout è all'interno di uno ScrollView, poi sul ScrollView è necessario aggiungere il parametro fillViewPort e impostarlo true

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

Ha funzionato per me !! –

+0

Questo era il mio problema! – rrbrambley

Problemi correlati