2011-10-25 18 views
10

mi ha il seguente codice XML:RelativeLayout - CenterInParent e marginTop

<RelativeLayout android:id="@+id/cover_box" 
    android:layout_width="wrap_content" android:layout_height="wrap_content"> 
    <ImageView android:id="@+id/cover" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" /> 
    <ImageView android:id="@+id/download" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/mark_download" 
     android:layout_centerInParent="true" android:layout_marginTop="90px" /> 
</RelativeLayout> 

Ma è di apparire come il marginTop viene ignorato.

risposta

8

Quando si utilizza il centro in genitore, la vista viene posizionata direttamente al centro. La parte superiore del margine entrerà in gioco solo se un oggetto si trova entro 90 px dalla parte superiore della vista. Spingendo così la vista centrata verso il basso per mantenere almeno 90 px di spazio sopra di esso. Quindi non viene ignorato, ma non sta avendo l'effetto che pensi che dovrebbe avere.

+0

Se quello fosse il caso, quindi modificando il margine di un valore alto cambierebbe la posizione dell'immagine. Ma sto testando su Android 4.2 e sembra che centerInParent ignori completamente qualsiasi margine nel layout relativo. – Behnam

24

Se si desidera che la seconda immagine sia 90 dpi al centro dello schermo, è possibile sostituirla con un FrameLayout in cui è possibile controllare il riempimento per spostare l'immagine verso il basso.

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:paddingTop="90dp"> 
    <ImageView android:id="@+id/download" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/mark_download"/> 
</FrameLayout> 
+1

Questo è stato molto utile. Grazie. Centra il framelayout e aggiungi padding/ –

+0

questa dovrebbe essere la risposta accettata –

3

Voglio che il ProgressBar al mostrato sotto android:layout_centerInParent="true" così ho aggiunto un manichino TextView e impostarlo centerInParent .Poi ho messo la mia progressbar sotto di essa. Ora puoi aumentare la distanza dal centro in due modi. Innanzitutto aumentando il margine superiore in TextView e la seconda altezza TextView crescente.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/widget" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/splash" > 

    <FrameLayout 
     android:id="@+id/splash_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <TextView 
     android:id="@+id/txt1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" /> 

    <com.s3.tdd.interfaces.CircularProgressBar 
     android:id="@+id/circularprogressbar2" 
     style="@style/Widget.ProgressBar.Holo.CircularProgressBar" 
     android:layout_width="110dip" 
     android:layout_height="110dip" 
     android:layout_below="@+id/txt1" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 
0

È possibile creare una vista fittizia e centrarla su padre. Ora allinea la tua vista relativa alla vista fittizia usando il layout: alignComponent e dai il margine a Top. Ora nel codice spostalo in base alla larghezza della tua vista per centrarlo.

1

Si può mettere l'imageview all'interno di altri ViewGroup (LinearLayout di aspetto RelativeLayout), lasciando il margine di ImageView, e facendo android:centerInParent="true" per il ViewGroup:

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

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:centerInParent="true"> 
      <ImageView android:id="@+id/download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/mark_download" android:layout_marginTop="90px" />  
    </LinearLayout>  
</RelativeLayout> 
Problemi correlati