2010-12-05 11 views
8

Estoy creando un elemento de lista personalizado en la vista de lista android. es muy simple, tiene una vista de texto a la izquierda y una imagen a la derecha. la imagen debe alinearse completamente hacia la derecha, y la vista de texto debe ocupar todo el espacio de la izquierda. El problema es que puedo hacer que la imagen se muestre, pero empuja hacia la izquierda. si configuro el ancho de la vista de texto para fill_parent, la imagen desaparece. aquí está mi diseño:Artículo de lista de Android: TextView a la izquierda, Imagen a la derecha

<?xml version="1.0" encoding="utf-8" ?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" 
       android:layout_width="fill_parent" android:layout_height="50px" android:layout_gravity="center_vertical"> 
    <!-- item --> 
    <TextView android:id="@+id/txtItem" android:gravity="center_vertical" android:textSize="20px" android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

    <!-- disclosure image --> 
    <ImageView android:layout_gravity="right|center_vertical" android:src="@drawable/common_icon_arrow_disclosure" 
       android:layout_width="wrap_content" android:layout_height="wrap_content"/> 
</LinearLayout> 

también he intentado un diseño relativo, pero pasa lo mismo. ¿Qué estoy haciendo mal?


EDIT: una aclaración, esto es lo que estoy tratando de lograr:

alt text

Quiero que el campo de texto para ocupar toda la zona izquierda, y la imagen que se va a el derecho, sin escalar, centrado verticalmente.

Respuesta

0

Disposición relativa es lo que desea. En su caso, el atributo fill_parent causaba que la vista de texto empujara la imagen fuera de la pantalla. Si usa el diseño relativo y establece la vista de texto para usar el layout_toLeftOf, debería funcionar.

Aquí está un ejemplo rápido que creo que va a trabajar (no he probado a cabo y es a partir de la memoria, pero la idea está ahí) ...

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="50px" 
       android:layout_gravity="center_vertical"> 
    <ImageView android:id="@+id/img" 
      android:layout_gravity="right|center_vertical" 
      android:src="@drawable/common_icon_arrow_disclosure" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 

    <TextView android:id="@+id/txtItem" 
      android:gravity="center_vertical" 
      android:textSize="20px" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_toLeftOf="@id/img" /> 
</RelativeLayout> 
+0

Eso tampoco funciona. la imagen de la flecha aparece, pero el texto no. Además, la flecha (que es menos alta que el elemento) no está centrada verticalmente, sino que está alineada en la parte superior. en realidad tenía algo muy similar, pero tenía el imageView con layout_toRightOf de la imagen de texto, pero eso hacía exactamente lo contrario de tu ejemplo, el texto aparecía, pero no la flecha. –

+0

Disculpe que no tengo tiempo para escribir un caso de prueba, pero otra cosa que podría intentar es * layout_alignParentLeft * en lugar de * layout_gravity *. Sé que hice exactamente lo que está pidiendo, pero no puedo encontrarlo en mis proyectos y sé que usó RelativeLayout. Buena suerte y volveré a revisar mañana si puedo. –

+1

utilicé layout_alignParentRight = "true" en el imageView (cambié la vista de la imagen y la vista de texto, ya que la vista de la imagen está a la derecha, realmente debería declararse en segundo lugar). el problema es doble; puedo ver tanto la vista de texto como la de img para mostrar, pero 1) la vista de la imagen no está centrada verticalmente, como mencioné, la imagen es en realidad más pequeña que la altura de la fila, y 2) la vista de la imagen no está alineada con la bien, en cambio, sigue justo después del final del texto. si cambio la vista de texto para tener un layout_width = "fill_parent", la vista de la imagen desaparece de nuevo. :( –

7

Puede utilizar dibujable mapa de bits como esto (esta esquinas redondeadas) también añade:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <solid android:color="@android:color/white" /> 
      <stroke 
       android:width="2dp" 
       android:color="#adadad" 
      /> 
      <corners android:radius="5dp" /> 
     </shape> 
    </item> 
    <item android:right="5dp" 
     android:top="2dp" 
     android:bottom="2dp"> 
     <bitmap 
      android:src="@drawable/image" 
      android:gravity="right" 
     /> 
    </item> 
</layer-list> 

y poner esta estirable en la propiedad de fondo de la Vista de Texto:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/right_image" 
    android:text="some text" 
    /> 
+0

¡Gracias! Esto también funciona para configurar un fondo personalizado y un icono de flecha hacia abajo para un control giratorio. Simplemente establece el fondo de tu ruleta en un recurso dibujable así definido y estás configurado. – Red3

1

Izquierda-alinear su texto con el padre, y establecer la gravedad de la imagen a la derecha:

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

    <TextView 
    android:id="@+id/team_member_name" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:gravity="center_vertical" 
    android:singleLine="true"/> 

    <ImageView 
    android:id="@+id/team_member_icon" 
    android:layout_alignParentRight="true" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="right" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:src="@drawable/circle_green"/> 

</RelativeLayout> 
0

Esto funcionó para mí:

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

    <TextView android:id="@+id/date" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:layout_marginRight="10dp" 
    android:textSize="16sp" 
    android:textColor="@color/text_color" 
    android:layout_alignParentLeft="true" 
    android:gravity="center_vertical"/> 

    <ImageView android:id="@+id/imageBtn" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:contentDescription="@string/delete" 
    android:src="@drawable/delete_minus_png" 
    android:layout_alignParentRight="true" /> 

</RelativeLayout> 

androide Línea: layout_marginRight = "10DP" hizo el truco .

Espero que ayude!

0

Parece que hay algún error de diseño más o menos. Si TextView tiene el indicador fill_parent, ImageView se alejará del diseño, incluso si los contenidos de TextView son lo suficientemente pequeños.

22

También puede simplemente agregar el dibujable a la vista de texto directamente así.

<TextView 
    android:id="@+id/txtItem" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:drawableRight="@drawable/common_icon_arrow_disclosure" 
    android:gravity="center_vertical" 
    android:textSize="20px" /> 
+0

Respuesta más precisa y simple. – ElYeante

+0

Esta debería ser la respuesta aceptada, ya que TextView establecerá automáticamente el compuesto que se puede dibujar cerca de sus límites. –

+0

, pero ¿cómo podemos realizar la acción OnClick solo en la imagen dibujable? ¿No en todo el texto? –

Cuestiones relacionadas