Hoe te klikken of tikken op een TextView-tekst

Ik weet dat dit zo eenvoudig is (doh…) maar ik ben op zoek naar een manier om een ​​methode uit te voeren voor het tikken of klikken op een tekstregel TextView in een Android-app.

Ik blijf denken aan knopluisteraars en anonieme methode-luisteraarsaanroepen, maar het lijkt gewoon niet van toepassing te zijn op TextView.

Kan iemand me naar een codefragment verwijzen om te laten zien hoe klikken of tikken op een stuk tekst in een TextView een methode uitvoert?


Antwoord 1, autoriteit 100%

U kunt de klikhandler in xml instellen met dit kenmerk:

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

Vergeet het clickable-attribuut niet, zonder dit wordt de click-handler niet aangeroepen.

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"/>
    ...

MijnActiviteit.java

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

Antwoord 2, autoriteit 12%

Dit is misschien niet helemaal wat je zoekt, maar dit is wat werkte voor wat ik doe. Dit alles is na mijn 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");
    }
});

Antwoord 3, autoriteit 6%

OK, ik heb mijn eigen vraag beantwoord (maar is dit de beste manier?)

Zo voert u een methode uit wanneer u op tekst in een TextView klikt of tikt:

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");  
    }
}

en mijn main.xml is:

<?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>

Antwoord 4, autoriteit 3%

van binnenuit een activiteit die een lay-out en een tekstweergave oproept, werkt deze kliklistener:

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());
                }
            }
        });

de tekstweergave wordt als volgt gedeclareerd (standaardwizard):

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

en in het strings.xml-bestand

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

Antwoord 5, autoriteit 3%

Hoewel je het probleem kunt oplossen door de luisteraar in te stellen op tekstweergave, wordt aangeraden dit niet te doen. U moet de platte knopgebruiken is een subklasse van Button en biedt veel attributen die TextView niet heeft.


Als u een platte knop wilt gebruiken, voegt u het kenmerk style="?android:attr/borderlessButtonStyle"toe –

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

Antwoord 6

in tekstweergave

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

U moet ook View.OnClickListener implementeren en in de On Click-methode kunt u intentie gebruiken

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

Ik heb getest dat deze oplossing goed werkt.


Antwoord 7

Om op een stukje tekst te klikken (niet de hele TextView), kunt u Htmlof Linkifygebruiken (beide maken links die open URL’s, echter geen terugbelverzoek in de app).

Linkify

Gebruik een tekenreeksbron zoals:

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

Vervolgens in een tekstweergave:

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

Html

Gebruik Html.fromHtml:

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

Vervolgens in je tekstweergave:

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

Antwoord 8

U kunt TextWatcher gebruiken voor TextView, is flexibeler dan ClickLinstener (niet de beste of slechtere, alleen meer in één richting).

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!
        }
    });

Other episodes