boolean
グローバル変数を宣言します。
boolean wordClicked = false;
次のように宣言して初期化l
しfinal
ます。
final RelativeLayout l = (RelativeLayout)findViewById(R.id.contentLayout);
OnClickListener
にを追加textView
:
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!wordClicked) {
// Let the click be handled by `l's` OnClickListener
l.performClick();
}
}
});
変更span
:
ClickableSpan span = new ClickableSpan() {
@Override
public void onClick(View widget) {
wordClicked = true;
Toast.makeText(Trial.this, "just word", Toast.LENGTH_SHORT).show();
// A 100 millisecond delay to let the click event propagate to `textView's`
// OnClickListener and to let the check `if (!wordClicked)` fail
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
wordClicked = false;
}
}, 100L);
}
};
編集:
ユーザー KMDev の回答を視野に入れておくと、次のコードが仕様を満たします。spannableString.setSpan(.., 0, 5, ..);
指定された長さのスパンと残りのスパンの 2 つのスパンを作成しますspannableString.setSpan(.., 6, spannableString.legth(), ..);
。2 番目ClickableSpan
(span2) は をクリックしますRelativeLayout
。さらに、 をオーバーライドupdateDrawState(TextPaint)
することで、2 番目のスパンに目立たない (スタイルのない) 外観を与えることができます。一方、最初のスパンにはリンクの色があり、下線が引かれています。
final RelativeLayout l = (RelativeLayout)findViewById(R.id.contentLayout);
l.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(Trial.this, "whole layout", Toast.LENGTH_SHORT).show();
}
});
TextView textView = (TextView)findViewById(R.id.t1);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(Color.TRANSPARENT);
SpannableString spannableString = new SpannableString(textView.getText().toString());
ClickableSpan span = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(Trial.this, "just word", Toast.LENGTH_SHORT).show();
}
};
spannableString.setSpan(span, 0, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
ClickableSpan span2 = new ClickableSpan() {
@Override
public void onClick(View widget) {
l.performClick();
}
@Override
public void updateDrawState(TextPaint tp) {
tp.bgColor = getResources().getColor(android.R.color.transparent);
tp.setUnderlineText(false);
}
};
spannableString.setSpan(span2, 6, spannableString.length(),
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(spannableString);
私の元の回答の問題に気づいてくれたユーザー KMDev に感謝します。ブール変数を使用して (誤った) チェックを実行する必要OnclickListener
はありません。また、TextView に を設定する必要はありません。