2012-01-11 24 views
12

Estoy tratando de crear un componente tipo botón, con un ImageView alineado a la izquierda y luego 2 TextViews a la derecha de ImageView, apilados uno encima del otro y formateados de forma diferente, como siguiente ejemplo:Diseño de Android como botón con funcionalidad seleccionable

__________________________ 
|       | 
| |-----| Bold Main Text | 
| |Image|     | 
| |-----| Small Sub Text | 
|__________________________| 

También quieren que el ImageView para cambiar dependiendo del estado de clic del contenedor externo, como un botón estándar que ver con un recurso seleccionable asociada a ella. De modo que cuando hago clic en cualquier lugar en el cuadro externo, se cambia el estado seleccionable de la imagen.

Sé que puedo usar un botón, estableciendo la propiedad 'drawableLeft' para crear una sola línea de texto asociada con una imagen como un botón, pero parece que solo puedo tener un solo elemento de texto usando esta estrategia.

¿Alguien ha implementado algún componente de IU como este en el pasado?

Gracias!

+1

bien que se puede utilizar su propio diseño, y añadir un OnClickListener a ella, por lo que se begave como un botón. Para el cambio de imagen al hacer clic en el estado, eso probablemente requeriría una lógica más compleja en el oyente, y tal vez el uso de un onTouchListener en su lugar – Guillaume

Respuesta

14

Puede agregar android:duplicateParentState="true" al widget ImageView. También necesita hacer que el padre ImageView pueda hacer clic y sea enfocable.

El RelativeLayout en el código siguiente actuará como Button:

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

    <RelativeLayout 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:focusable="true"> 

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:duplicateParentState="true" 
      android:src="@drawable/icon" /> 
     <TextView 
      android:id="@+id/text1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/image" 
      android:layout_alignTop="@+id/image" 
      android:layout_alignWithParentIfMissing="true" 
      android:duplicateParentState="true" /> 
     <TextView 
      android:id="@+id/text2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"    
      android:layout_toRightOf="@+id/image" 
      android:layout_below="@+id/text1" 
      android:layout_alignWithParentIfMissing="true" 
      android:duplicateParentState="true" /> 
    </RelativeLayout> 
</LinearLayout> 
+1

Thanks Pixie, que funcionó a la perfección. –

+0

¡De nada! Me alegro de que haya ayudado. – Michael

+1

¡Solución impresionante! He intentado hacer esto por horas ahora. Esto hizo mi dia. ¡Gracias! – VM4

Cuestiones relacionadas