如何点击或点击一个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
),可以使用Html
或Linkify
(两者都创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 <a href="http://www.stackoverflow.com">Link!</></string>
然后在你的textview中:
textView.setText(Html.fromHtml(getString(R.string.html)));