Android Múltiples secuencias de clics en textview
Estoy creando una pequeña aplicación de Android. Me gustaría mostrar un texto en una vista de texto con varias partes para hacer clic en. (Cada uno debe mostrar un mensaje diferente)
Finalmente me las arreglé para averiguar cómo mostrar mutiple spans en un textview, sin embargo, lamentablemente los métodos onClick no funcionan. Simplemente no pasa nada, ni siquiera una línea logcat.
- ¿Agregar nuevas líneas a un recurso de texto en Android?
- Android gire TextView en nivel de API> = 8
- Android, ¿Cómo puedo obtener texto de TextView en OnClick
- Android: ¿Por qué el método onClick no funciona?
- Personalización del icono setError para TextView
Tengo algo como esto:
SpannableStringBuilder ssb=new SpannableStringBuilder(); ssb.append("first second") ssb.setSpan(new ClickableSpan() { @Override public void onClick(View v) { //Eredmeny2.this is just the context, name of the whole class Toast.makeText(Eredmeny2.this, "first", Toast.LENGTH_LONG).show(); } }, 1, 3, 0); ssb.setSpan(new ClickableSpan() { @Override public void onClick(View v) { Toast.makeText(Eredmeny2.this, "second", Toast.LENGTH_LONG).show(); } }, 7, 10, 0); TextView t1=new TextView(this); t1.setText(ssb); ...
El texto se subraya bien, pero no pasa nada cuando hago clic en ellos. Es una parte de un TableView, aunque no creo que esto sea relevante. ¿Tienes alguna idea de por qué no hace nada? ¿Qué extraño? ¿O debo hacerlo de alguna manera totalmente diferente?
Gracias por adelantado.
El archivo de diseño que esta parte utilizará es el siguiente:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/ScrollView01" android:background="#FF0000"> <TableLayout android:id="@+id/TableLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:stretchColumns="0" android:showDividers="middle" android:padding="3dp"> <TableRow android:id="@+id/TableRow01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="3dp" android:background="#000000" android:textColor="#FFFFFF" android:padding="6dp" android:text="Hour" android:textSize="20sp" android:textStyle="bold" > </TextView> <TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:textStyle="bold" android:text="Minute" android:padding="6dp" android:textColor="#FFFFFF" android:background="#000000"> </TextView> </TableRow> </TableLayout> </ScrollView>
Y el diseño TextView que TextView utiliza directamente es el siguiente:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dp" android:textSize="16sp" android:background="#000000" android:textIsSelectable="false" android:textColor="#FFFFFF"> </TextView>
- ¿Cómo hacer efecto bling en textview en clic?
- Colocación de una vista de texto en la parte superior de la vista de la imagen en android
- OnClick posición en cadena en TextView
- Establecer el ancho de TextView en términos de caracteres
- Actualizar textView desde el hilo
- Aplicar estilo de Android a TextView personalizado
- Resalta textview para saber que se puede hacer clic
- Cómo puedo dibujar texto en una vista en un patrón circular en Android
Como entiendo que desea hacer múltiples partes de textview clicable.
Este código funcionó para mí!
SpannableString ss = new SpannableString("this is a text"); ss.setSpan(new myClickableSpan(1),0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new myClickableSpan(2),5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new myClickableSpan(3),8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mTextView.setText(ss); mTextView.setMovementMethod(LinkMovementMethod.getInstance());
Sólo haga clickableSpan personalizado para manejar el evento de clic
public class myClickableSpan extends ClickableSpan{ int pos; public myClickableSpan(int position){ this.pos=position; } @Override public void onClick(View widget) { Toast.makeText(getApplicationContext(), "Position " + pos + " clicked!", Toast.LENGTH_LONG).show(); } }
- Cómo ajustar el tono de un código de color?
- Utilizando IntentService para la reproducción de MediaPlayer