Как щелкнуть или коснуться текста TextView
Я знаю, что это так просто (doh...), но я ищу способ запустить метод при нажатии или щелчке строки текста TextView в приложении для Android.
Я продолжаю думать о прослушивателях кнопок и вызовах анонимного метода, но он просто не применяется к TextView.
Может кто-нибудь указать мне на фрагмент кода, чтобы показать, как щелчок или нажатие на кусок текста в TextView запускает метод?
Ответы
Ответ 1
Вы можете установить обработчик кликов в xml с помощью этого атрибута:
android:onClick="onClick"
android:clickable="true"
Не забывайте атрибут clickable, без него обработчик клика не вызывается.
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) {
...
}
}
Ответ 2
Это может быть совсем не то, что вы ищете, но это то, что я работал. Все это после моего 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");
}
});
Ответ 3
ОК Я ответил на свой вопрос (но это лучший способ?)
Вот как запустить метод при нажатии или нажатии какого-либо текста в 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");
}
}
а my 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>
Ответ 4
изнутри действия, которое вызывает макет и текстовое представление, этот прослушиватель кликов работает:
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>
Ответ 5
в 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 = new Intent(android.content.Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://youraddress.com"));
startActivity(intent);
Я тестировал это решение, отлично работает.
Ответ 6
Хотя вы можете решить проблему, установив прослушиватель в textview, рекомендуется не делать этого. Вы должны использовать плоскую кнопку, поскольку это подкласс Button и предоставляет множество атрибутов, которые TextView не делает.
Чтобы использовать плоскую кнопку, добавьте атрибут style="?android:attr/borderlessButtonStyle"
-
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DONE"
style="?android:attr/borderlessButtonStyle"/>
Ответ 7
Чтобы щелкнуть фрагмент текста (не весь TextView
), вы можете использовать Html
или Linkify
(оба создают ссылки, открывающие URL-адреса, но не обратные вызовы в приложении).
Linkify
Используйте строковый ресурс, например:
<string name="links">Here is a link: http://www.stackoverflow.com</string>
Затем в текстовом виде:
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="#" onclick="location.href='http://www.stackoverflow.com'; return false;">Link!</></string>
Затем в вашем тексте:
textView.setText(Html.fromHtml(getString(R.string.html)));