2014-11-17 13 views
5

in RelativeLayout di Android possiamo impostare textView esattamente al centro dello schermo con questo codice:Android relativo centro layout verticale con un margine

<TextView 
    android:text="This is TextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" /> 

risultato:

top 
- 
- 
- 
- 
This is TextView (center vertical) 
- 
- 
- 
- 
bottom 

Ma ho bisogno TextView a essere un po 'in basso, provo ad aggiungere marginTop ma sembra che dopo aver usato layout_centerVertical=true diventa impossibile. Qualche soluzione?

Risultato atteso (un po 'verso il basso):

top 
- 
- 
- 
- 
- 
- 
This is TextView (center vertical slight to bottom) 
- 
- 
bottom 
+0

ottima domanda, grazie – smoothumut

risposta

6

tenta di utilizzare LinearLayout che può facilmente fare il vostro requisito utilizzando il peso:

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

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 

    </LinearLayout> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:gravity="center_vertical"> 
     <TextView 
      android:text="This is TextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </LinearLayout> 
</LinearLayout> 
+0

questo approccio è davvero buono, grazie –

+0

@ AbrahamPutraP, contento di aiutarti ... –

+0

Si può fare usando solo il relativelayout, senza la necessità di avere una complicata gerarchia delle viste. vedi la mia risposta sotto – amarkovits

6

Prova questo:

Prova a utilizzare RelativeLayout che può facilmente essere soddisfatto utilizzando il peso:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_vertical"> 
     <TextView 
      android:id="@id/dummy" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_centerHorizontal="true" /> 
     <TextView 
      android:layout_below="@id/dummy" 
      andoird:marginTop="10dp" 
      android:text="This is TextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
</RelativeLayout> 
1

Ho incontrato questo tipo di problema oggi e ho capito in questo modo. Sapce e LinearLayout è una buona soluzione per farlo.

<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" 
    android:background="@color/base_background_color"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/base_toolbar_color" 
     android:minHeight="?attr/actionBarSize"/> 

    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/toolbar"/> 

    <!-- using LinearLayout to align ProgressBar to center vertical --> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:orientation="vertical"> 

     <Space 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize"/> 

     <ProgressBar 
      android:id="@+id/other_profile_progressBar" 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:indeterminate="false"/> 
    </LinearLayout> 
</RelativeLayout> 
3

Perché dovrebbe aggiungere vista nested all'interno vista primaria?

Utilizzare l'attributo paddingTop.

Esempio:

<RelativeLayout 
    android:id="@+id/rlParentView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 


    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:paddingTop="10dp"/> 

</RelativeLayout> 

Spero che questo vi aiuterà.

+0

non funziona se larghezza e altezza hanno un valore fisso come 50dp – ACAkgul

Problemi correlati