web-dev-qa-db-de.com

Klicken oder Tippen auf einen TextView-Text

Ich weiß, das ist so einfach (doh ...), aber ich suche nach einer Möglichkeit, eine Methode zum Tippen oder Klicken auf eine TextView-Textzeile in einer Android-App auszuführen.

Ich denke immer wieder an Tastenlistener und anonyme Methodenlistener-Aufrufe, aber das scheint für TextView einfach nicht zu gelten.

Kann jemand auf ein Codeausschnitt verweisen, um zu zeigen, wie durch Klicken oder Tippen auf einen Text in einer TextView-Methode eine Methode ausgeführt wird?

181
Droid

Sie können den Click-Handler in XML mit den folgenden Attributen festlegen:

Android:onClick="onClick"
Android:clickable="true"

Vergessen Sie das klickbare Attribut nicht, ohne dass der Click-Handler nicht aufgerufen wird. 

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

MeineAktivität.Java 

       public class MyActivity extends Activity {

          public void onClick(View v) {
            ...
          }  
       }
440
Patrick Cullen

Das ist vielleicht nicht ganz das, wonach Sie suchen, aber es hat funktioniert, was ich tue. All dies ist nach meiner 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");
    }
});
40

OK, ich habe meine eigene Frage beantwortet (aber ist dies der beste Weg?)

So führen Sie eine Methode aus, wenn Sie auf einen Text in einer Textansicht klicken oder auf diesen tippen:

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

und meine main.xml lautet:

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

dieser Klicklistener funktioniert innerhalb einer Aktivität, die ein Layout und eine Textansicht aufruft:

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

die Textansicht wird folgendermaßen deklariert (Standardassistent):

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

und in der Datei strings.xml

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

Sie können das Problem zwar lösen, indem Sie den Listener auf textview setzen. Dies wird jedoch nicht empfohlen. Sie sollten flat button verwenden, da dies eine Unterklasse von Button ist und viele Attribute enthält, die TextView nicht bietet.


Um die flache Schaltfläche zu verwenden, fügen Sie das style="?android:attr/borderlessButtonStyle"-Attribut hinzu.

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

in textView

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

Sie müssen auch View.OnClickListener implementieren und in der On-Click-Methode kann intent verwendet werden

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

Ich habe getestet, dass diese Lösung gut funktioniert.

6
rp23b

Um auf einen Teil des Textes zu klicken (nicht auf die gesamte Variable TextView), können Sie Html oder Linkify verwenden (beide erstellen Links, die URLs öffnen, jedoch keinen Rückruf in der App).

Linkify

Verwenden Sie eine String-Ressource wie:

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

Dann in einer Textansicht:

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

Html

Html.fromHtml verwenden:

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

Dann in Ihrer Textansicht:

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

Sie können TextWatcher für TextView verwenden, ist flexibler als ClickLinstener (nicht optimal oder schlechter, nur in einer Richtung).

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!

        }
    });
0
Marcelo Amaral