2011-04-29 28 views
5

Tengo una ListActivity en Android. Cada fila es solo un elemento que inicia otra actividad con algún recurso. Por defecto, esto es, por supuesto, un TextView.¿Cómo puedo hacer que un TextView parezca un botón?

Me gustaría (y en "Me gustaría", me refiero a "el cliente insiste") que TextView parezca un botón. Si realmente los hago Botones, el manejador de clic de lista predeterminado ya no funciona, incluso si no son enfocables, así que tengo que escribir código para inflar manualmente la vista que contiene el botón y configurar un manejador de clic.

¿Hay alguna forma en su lugar, solo puedo hacer que TextView parezca un botón sin ningún comportamiento de un botón?

Respuesta

8

Debería poder simplemente establecer el estilo en el archivo XML de diseño.

Consulte http://developer.android.com/reference/android/R.style.html para obtener una lista del estilo de plataforma incorporada. No estoy seguro de qué tan bien funcionaría, pero es razonablemente fácil de hacer. Prueba esto:

<TextView android:layout_height="wrap_content" style="@android:style/Widget.Button" android:layout_marginRight="5sp" android:text="" android:layout_width="fill_parent"></TextView> 

EDIT: el problema es que el estilo de botón por defecto establece el atributo android:clickable. Trate de añadir el atributo android:clickable y ponerlo en falso:

<TextView android:layout_height="wrap_content" style="@android:style/Widget.Button" android:layout_marginRight="5sp" android:text="" android:clickable="false" android:layout_width="fill_parent"></TextView> 
+0

Esto, algo asombroso, no funciona. Simplemente teniendo el estilo de botón es suficiente para hacer que la vista bloquee la lista haga clic en eventos. –

+1

Debería poder sobreescribir el atributo 'android: clickable'. Ver mi edición – Femi

+0

Eso funciona. Gracias. Me acabas de salvar de doblar las líneas en esta actividad trivial. –

5

Joe,

sólo debe ser capaz de crear un Drawable de un botón y utilizar setBackgroundDrawable() en el TextView.

Como alternativa, puede usar el atributo XML android:background.

+0

estoy usando un CursorAdapter y una ListActivity - idealmente no tengo que llamar a cualquier función particular en el botón" "porque no hay un código que sepa que existe". –

+0

respuesta editada para incluir el atributo XML que puede usar si no desea hacerlo mediante programación. –

+1

¿Hay algún nombre que pueda usar para obtener el estilo de botón "predeterminado"? Incluir mi propia imagen dibujable aumentará el tamaño del programa y el riesgo en conflicto con el predeterminado de la plataforma. –

0

Tome este diseño completo de mi proyecto:

<?xml version="1.0" encoding="utf-8"?> 

<!-- Solution 1: New Button appearance --> 
<!--TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    style="@android:style/Widget.DeviceDefault.Button" 
    android:textAllCaps="false" 
    android:focusable="false" 
    android:clickable="false" /--> 

<!-- Solution 2: Old Button appearance --> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:drawable/btn_default" 
     android:gravity="center_vertical|center_horizontal" /> 

sin hacer clic = false onItemClick() no se dispara en ListView/GridView etc.

sin enfocable = falso, no tiene el efecto de botón presionado cuando presiona un botón TextView.

0

En XML conjunto TextView:

android:clickable="true" 

y en Java conjunto de archivos:

TextView youtTextView=(TextView)findViewById(R.id.yourTxt); 

youtTextView.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     //code your button click action/event 
    } 
}); 
Cuestiones relacionadas