example android onclick listener textview

android - example - Cómo hacer clic o tocar un texto de TextView



textview button android example (8)

Aunque puede resolver el problema configurando el oyente en la vista de texto, se recomienda no hacerlo. Debes usar el botón plano ya que es una subclase de Botón y proporciona muchos atributos que TextView no ofrece.

Para usar el botón plano, agrega el atributo style="?android:attr/borderlessButtonStyle" -

<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="DONE" style="?android:attr/borderlessButtonStyle"/>

Sé que esto es muy fácil (doh ...) pero estoy buscando una forma de ejecutar un método para tocar o hacer clic en una línea de texto de TextView en una aplicación de Android.

Sigo pensando en oyentes de botones y llamadas a escuchas de métodos anónimos, pero simplemente no parece aplicarse a TextView.

¿Puede alguien señalarme un fragmento de código para mostrar cómo se ejecuta un método al hacer clic o tocar una parte del texto en un TextView?


OK He respondido mi propia pregunta (¿pero es la mejor manera?)

Esta es la forma de ejecutar un método cuando haces clic o tocas un texto en un TextView:

package com.textviewy; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class TextyView extends Activity implements OnClickListener { TextView t ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); t = (TextView)findViewById(R.id.TextView01); t.setOnClickListener(this); } public void onClick(View arg0) { t.setText("My text on click"); } }

y mi main.xml es:

<?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:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"></LinearLayout> <ListView android:id="@+id/ListView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ListView> <LinearLayout android:id="@+id/LinearLayout02" android:layout_width="wrap_content" android:layout_height="wrap_content"></LinearLayout> <TextView android:text="This is my first text" android:id="@+id/TextView01" android:layout_width="wrap_content" android:textStyle="bold" android:textSize="28dip" android:editable = "true" android:clickable="true" android:layout_height="wrap_content"> </TextView> </LinearLayout>


Para hacer clic en una parte del texto (no en todo TextView ), puede usar Html o Linkify (ambos crean enlaces que abren urls, sin embargo, no una devolución de llamada en la aplicación).

Linkify

Use un recurso de cadena como:

<string name="links">Here is a link: http://www..com</string>

Luego en una vista de texto:

TextView textView = ... textView.setText(R.string.links); Linkify.addLinks(textView, Linkify.ALL);

Html

Usando Html.fromHtml :

<string name="html">Here you can put html &lt;a href="http://www..com"&gt;Link!&lt;/&gt;</string>

Luego en tu vista de texto:

textView.setText(Html.fromHtml(getString(R.string.html)));


Puede configurar el manejador de clics en xml con estos atributos:

android:onClick="onClick" android:clickable="true"

No olvides el atributo que se puede hacer clic, sin él no se llama al controlador de clics.

main.xml

... <TextView android:id="@+id/click" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click Me" android:textSize="55sp" android:onClick="onClick" android:clickable="true"/> ...

MyActivity.java

public class MyActivity extends Activity { public void onClick(View v) { ... } }


Puede que no sea exactamente lo que estás buscando, pero esto es lo que funcionó para lo que estoy haciendo. Todo esto es después de mi onCreate :

boilingpointK = (TextView) findViewById(R.id.boilingpointK); boilingpointK.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if ("Boiling Point K".equals(boilingpointK.getText().toString())) boilingpointK.setText("2792"); else if ("2792".equals(boilingpointK.getText().toString())) boilingpointK.setText("Boiling Point K"); } });


Puede usar TextWatcher para TextView, es más flexible que ClickLinstener (no mejor ni peor, solo más de una forma).

holder.bt_foo_ex.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // code during! } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // code before! } @Override public void afterTextChanged(Editable s) { // code after! } });


desde dentro de una actividad que llama un diseño y una vista de texto, este oyente de clic funciona:

setContentView(R.layout.your_layout); TextView tvGmail = (TextView) findViewById(R.id.tvGmail); String TAG = "yourLogCatTag"; tvGmail.setOnClickListener(new OnClickListener() { @Override public void onClick(View viewIn) { try { Log.d(TAG,"GMAIL account selected"); } catch (Exception except) { Log.e(TAG,"Ooops GMAIL account selection problem "+except.getMessage()); } } });

la vista de texto se declara así (asistente predeterminado):

<TextView android:id="@+id/tvGmail" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/menu_id_google" android:textSize="30sp" />

y en el archivo strings.xml

<string name="menu_id_google">Google ID (Gmail)</string>


en textView

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" android:onClick="onClick" android:clickable="true"

También debe implementar View.OnClickListener y en el método On Click puede usar intenciones

Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setData(Uri.parse("https://youraddress.com")); startActivity(intent);

Probé que esta solución funciona bien.