テキストビューの一部に onclick を追加することは可能ですか? たとえば、私のコードは次のようになります。
String content = "Hello this a test.. For more details contact @Peter";
someTextView.setText(content);
「@Peter」の onClick イベントを追加したいと思います。それは可能ですか?
ティア。
単純: -)
SpannableString link = makeLinkSpan("@Peter", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Peforme Click
}
});
String content = "Hello this a test.. For more details contact";
someTextView.setText(content);
someTextView.append(link);
そしてmakeLinkSpan()
方法は
private SpannableString makeLinkSpan(CharSequence text, View.OnClickListener listener) {
SpannableString link = new SpannableString(text);
link.setSpan(new ClickableString(listener), 0, text.length(),
SpannableString.SPAN_INCLUSIVE_EXCLUSIVE);
return link;
}
ClickableString
クラス
private static class ClickableString extends ClickableSpan {
private View.OnClickListener mListener;
public ClickableString(View.OnClickListener listener) {
mListener = listener;
}
@Override
public void onClick(View v) {
mListener.onClick(v);
}
}
応答してくれた@user370305に感謝します。しかし、彼は答えの一部のコードスニペットを見逃しました。他の人の利益のために、私は私のために働いたコード全体を貼り付けています、
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView someTextView = (TextView)findViewById(R.id.someTextView);
String content = "Hello this a test.. For more details contact";
someTextView.setText(content);
SpannableString link = makeLinkSpan("@Peter", new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do something here..
}
});
someTextView.append(link);
}
makeLinksFocusable(someTextView);
}
private void makeLinksFocusable(TextView tv) {
MovementMethod m = tv.getMovementMethod();
if ((m == null) || !(m instanceof LinkMovementMethod)) {
if (tv.getLinksClickable()) {
tv.setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
private SpannableString makeLinkSpan(CharSequence text, View.OnClickListener listener) {
SpannableString link = new SpannableString(text);
link.setSpan(new ClickableString(listener), 0, text.length(),
SpannableString.SPAN_INCLUSIVE_EXCLUSIVE);
return link;
}
private static class ClickableString extends ClickableSpan {
private View.OnClickListener mListener;
public ClickableString(View.OnClickListener listener) {
mListener = listener;
}
@Override
public void onClick(View v) {
mListener.onClick(v);
}
}
あなたのXmlにこれを追加してください、android:clickable="true"
あなたの活動では、このように使用します。
textView.setOnClickListener(new View.OnClickListener(){
public void onClick(){
}
}
これは Java コードを使用して可能です:
someTextView.setOnClickListener(new View.OnClickListener(){
public void onClick(){
//Do Stuff
}
});
ただし、最初にクリック可能に設定していることを確認してください。
someTextView.setClickable(true);
これを試して:
SpannableString str = new SpannableString("@Peter");
str.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
// TODO Auto-generated method stub
}
}, 0, str.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
str
次に、TextView に追加します。
setMovementMethod(LinkMovementMethod.getInstance());
また、 TextViewを呼び出す必要があります