2011-10-25 12 views
10

I ma następujące XML:RelativeLayout - CenterInParent i 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> 

Ale to wyglądać tak jak z marginTop jest ignorowany.

Odpowiedz

8

Podczas korzystania z centrum w widoku macierzystym widok jest umieszczany bezpośrednio w środku. Górna krawędź marginesu będzie dostępna tylko wtedy, gdy obiekt znajduje się w odległości 90 pikseli od wierzchołka widoku. W ten sposób przesuwając środkowy widok w dół, aby zachować co najmniej 90 pikseli miejsca na wierzchu. Więc nie jest to ignorowane, ale nie ma efektu, który według ciebie powinien mieć.

+0

Jeśli tak było, to zmienia margines wysoka wartość zmieniłaby położenie obrazu. Ale testuję na systemie Android 4.2 i wygląda na to, że centerInParent całkowicie zastępuje margines w układzie względnym. – Behnam

24

Jeśli chcesz, aby drugi obraz miał 90dp poniżej środka ekranu, możesz zastąpić go FrameLayout, w którym możesz kontrolować dopełnienie, aby przesunąć obraz w dół.

<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

To było bardzo pomocne. Dziękuję Ci. Wyśrodkuj framelayout i dodaj dopełnienie/ –

+0

to powinna być zaakceptowana odpowiedź –

3

chcę progressbar aby wykazane w android:layout_centerInParent="true" więc dodałem obojętne TextView i ustawić ją na centerInParent .Następnie Kładę progressbar pod nią. Teraz możesz zwiększyć jego odległość od środka na dwa sposoby. Najpierw zwiększając marginTop w TextView i zwiększając wysokość TextView.

<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

Można zrobić fałszywy widok i wyśrodkować go na obiekt nadrzędny. Teraz wyrównaj swój widok względem widoku fikcyjnego za pomocą layout: alignComponent i nadaj marginTop. Teraz w kodzie przesuń go zgodnie z szerokością widoku, aby go wyśrodkować.

1

można umieścić ImageView wewnątrz drugiej ViewGroup (LinearLayout layoutu RelativeLayout), pozostawiając margines ImageView i robi android:centerInParent="true" dla 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>