2010-01-20 12 views
128

Estoy comenzando con Android. Tengo problemas para lograr un diseño simple.Alineación de textviews en los bordes izquierdo y derecho en el diseño de Android

Me gustaría utilizar un LinearLayout para colocar dos TextViews en una sola fila. Una TextView en el lado izquierdo, la otra en el lado derecho (análoga a flotar: izquierda, flotar: derecha en CSS).

¿Es posible o necesito usar un ViewGroup o un diseño de anidación diferente para lograrlo?

Esto es lo que tengo hasta ahora:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="fill_parent" 
android:orientation="horizontal" android:padding="10sp"> 
<TextView android:id="@+id/mytextview1" android:layout_height="wrap_content" android:text="somestringontheleftSomestring" android:layout_width="wrap_content"/> 
<TextView android:id="@+id/mytextview2" android:layout_height="wrap_content" android:ellipsize="end" 
    android:text="somestringontheright" android:layout_width="wrap_content"/> 
</LinearLayout> 

Respuesta

243

Utilice un RelativeLayout con layout_alignParentLeft y layout_alignParentRight:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:id="@+id/mytextview1"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:id="@+id/mytextview2"/> 

</RelativeLayout> 

Además, you should probably be using dip (or dp) rather than sp in your layout. sp reflejan la configuración de texto y la densidad de pantalla, por lo que generalmente solo sirven para ajustar el tamaño de los elementos de texto.

+45

Para evitar que el contenido de la superposición, también puede querer añadir 'android: layout_toLeftOf = "@ +/Identificación del mytextview2"' a la primera TextView –

+0

Para las tablas dinámicas, que puede hacer: TableRow.LayoutParams col1Params = new TableRow.LayoutParams(); \t \t // Concluir el contenido de la fila \t \t col1Params.height = LayoutParams.RESUMIR CONTENIDO; \t \t col1Params.width = LayoutParams.WRAP_CONTENT; \t \t \t \t // Establecer la gravedad para centrar la gravedad de la columna \t \t col1Params.gravity = Gravity.LEFT; – siddhusingh

+0

Gracias, me hizo la vida más fácil. Realmente thx .. – choz

80

Puede usar la propiedad de gravedad para "flotar" las vistas.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:gravity="center_vertical|center_horizontal" 
      android:orientation="horizontal"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:layout_weight="1" 
      android:text="Left Aligned" 
      /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:layout_weight="1" 
      android:text="Right Aligned" 
      /> 
    </LinearLayout> 

</LinearLayout> 
+1

Desafortunadamente, parece que esto no causa que ambos elementos estén en la misma línea – Webnet

+1

¿La gravedad no afecta solo a la "alineación de texto"? –

+0

esto no está funcionando ahora. Probablemente funcionó en las antiguas API –

4

<TextView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="Hello world" /> 

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

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Gud bye" /> 

+1

Lo que ........ – Subho

+0

mismo comentario que quería hacer: D: D;) – eRaisedToX

+0

Esta solución funciona en muchos casos donde la solución aceptada no – slezica

6

Incluso con la punta de Rollin_s, la respuesta de Dave Webb no funcionó para mí. El texto de la derecha TextView seguía superponiéndose al texto de la izquierda TextView.

finalmente me dieron el comportamiento que quería con algo como esto:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout01" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="10dp"> 

<TextView 
    android:id="@+id/mytextview1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" /> 

<TextView 
    android:id="@+id/mytextview2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@id/mytextview1" 
    android:gravity="right"/> 

</RelativeLayout> 

Tenga en cuenta que mytextview2 tiene "android:layout_width" conjunto como "match_parent".

Espero que esto ayude a alguien!

0

Se puede hacer con LinearLayout (menos gastos generales). Dale a la segunda vista el espacio restante para que gravity pueda funcionar. Probado de nuevo a la API 16.

Proof

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Aligned left" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="end" 
     android:text="Aligned right" /> 
</LinearLayout> 

Si desea limitar el tamaño de la primera vista de texto, hacer esto:

Ajuste pesos según sea necesario.

Proof 2

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:text="Aligned left but too long and would squash the other view" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:gravity="end" 
     android:text="Aligned right" /> 
</LinearLayout> 
Cuestiones relacionadas