如何点击或点击一个TextView文本

我知道这是如此简单(doh …),但我正在寻找一种方法来在Android应用程序中点击或点击TextView文本行。

我一直在考虑button侦听器和匿名方法侦听器调用,但它似乎并不适用于TextView。

有人可以指点我一些代码片段,以显示如何点击或轻击TextView中的一段文字运行一个方法?

您可以使用以下属性在xml中设置点击处理程序:

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

不要忘记可点击的属性,没有它,点击处理程序不会被调用。

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) { ... } } 

这可能不是你正在寻找的,但是这正是我所做的。 所有这一切都是在我的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"); } }); 

好的,我已经回答了我自己的问题(但这是最好的方法吗?)

这是如何运行一个方法,当你点击或点击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"); } } 

和我的main.xml是:

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

从一个调用布局和文本视图的活动中,这个点击监听器的工作原理是:

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

文本视图是这样声明的(默认向导):

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

并在strings.xml文件中

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

在textView中

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

你还必须实现View.OnClickListener,而在On Click方法中可以使用intent

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

我testing这个解决scheme工作正常。

虽然可以通过将侦听器设置为textview来解决该问题,但build议不要这样做。 你应该使用平面button,因为它是Button的一个子类,它提供了很多TextView没有的属性。


要使用平面button,添加style="?android:attr/borderlessButtonStyle"属性 –

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

要点击一段文本(不是整个TextView ),可以使用HtmlLinkify (两者都创build打开urls的链接,但不是应用程序中的callback)。

Linkify

使用string资源,如:

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

然后在textview中:

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

Html

使用Html.fromHtml

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

然后在你的textview中:

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