2013-07-08 6 views
7

L'attività è semplice: ci sono due pulsanti e uno TextView sopra di loro. Tutti i widget devono essere centrati all'interno del relativo layout. L'unica idea che ho è creare il terzo widget View e usarlo come asse centrale per i pulsanti. Qualche idea? Un layout ridondante non è una buona soluzione.Come centrare due viste in un layout relativo?

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

    <TextView 
     android:id="@+id/tv_progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:text="@string/app_name" /> 

    <View 
     android:id="@+id/view_axis" 
     android:layout_width="1dp" 
     android:layout_height="1dp" 
     android:layout_below="@id/tv_progress" 
     android:layout_centerInParent="true" /> 

    <Button 
     android:id="@+id/button_start" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/tv_progress" 
     android:layout_toLeftOf="@id/view_axis" 
     android:text="@string/start" /> 

    <Button 
     android:id="@+id/button_stop" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/tv_progress" 
     android:layout_toRightOf="@id/view_axis" 
     android:text="@string/stop" /> 

</RelativeLayout> 
+0

Guardate qui, questo risponde alla domanda, la risposta non è spuntato quello che è stato inizialmente chiesto. http://stackoverflow.com/questions/10904864/relativelayout-gravity-center-not-working/13280255#13280255 – user1806772

risposta

5

se ho capito quello che vuoi in modo corretto, si può mettere le Button s in un LinearLayout e un centro che

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

<TextView 
    android:id="@+id/tv_progress" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="@string/app_name" /> 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_below="@id/tv_progress"> 
<Button 
    android:id="@+id/button_start" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/start" /> 

<Button 
    android:id="@+id/button_stop" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/stop" /> 
</LinearLayout> 

non sono sicuro se questo è ciò che si intende per un "layout ridondante" ma farlo va bene se ti dà quello che vuoi.

+1

certo, posso. Ma è un 'LinearLayout 'ridondante. Dopo aver letto [Trucchi del layout Android # 3] (http://android-developers.blogspot.ru/2009/03/android-layout-tricks-3-optimize-by.html) e [Trucchi del layout Android # 1] (http://android-developers.blogspot.ru/2009/02/android-layout-tricks-1.html), ho iniziato a costruire i layout con maggiore attenzione. –

+2

Usarlo in questo modo non ti farà del male. Forse se è in un 'ListView', ma se questo non è un problema. Non vuoi troppi layout 'nidificati inutili ', ma in questo caso è il modo più semplice per farlo. Quindi non è necessario e c'è solo un 'layout' nidificato! – codeMagic

+0

grazie! Sono d'accordo, il nidificato 'LinearLayout' è OK in questo caso. –

0

Ciò verticalmente e orizzontalmente centrare l'intero blocco costituito dal TextView + tasti

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

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:layout_centerInParent="true"> 

     <TextView 
      android:id="@+id/tv_progress" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/app_name" /> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

      <Button 
       android:id="@+id/button_start" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/start" /> 

      <Button 
       android:id="@+id/button_stop" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/stop" />  

     </LinearLayout> 

    </LinearLayout> 

</RelativeLayout> 
+1

Si sta aggiungendo un 'LinearLayout' non necessario in questo modo – codeMagic

+0

Come verrebbe centrato l'intero blocco? A modo tuo, Textview sarà centrato e i pulsanti appariranno sotto di loro. –

+0

I 'Button's appariranno centrati sotto il' TextView' che è centrato. Penso che questo sia ciò che l'OP sta facendo, ma potrebbe essere sbagliato. Non ho ancora avuto la possibilità di confrontare i due 'layout's ma dovrebbero avere lo stesso effetto – codeMagic

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

    <Spinner 
     android:id="@+id/sp_rooms" 
     android:layout_toLeftOf="@id/space" 
     android:layout_centerVertical="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Space 
     android:id="@+id/space" 
     android:layout_centerInParent="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:id="@+id/btn_registration" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@id/space" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</RelativeLayout>