TextView 設置 LinkMovementMethod 後,點擊非鏈接區域無響應,需同時支持「鏈接跳轉」與「整體項目點擊」。
設置 OnTouchListener 並 返回 false,讓事件繼續傳遞給 MovementMethod 處理鏈接。
TextView tv = findViewById(R.id.tv);
SpannableString ss = new SpannableString("點擊這裡撥打電話");
ss.setSpan(new URLSpan("tel:10086"), 3, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(ss);
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP) {
// 整體點擊邏輯:跳轉詳情頁等
startActivity(new Intent(this, DetailActivity.class));
}
return false; // 關鍵:false 表示未消費,鏈接仍可點擊
});
LinkMovementMethod 處理 ACTION_UP 判斷點擊位置是否落在 Span 區域。OnTouchListener 返回 false 表示「我處理完了但不攔截」,系統繼續分發給 View 自身 onTouchEvent → MovementMethod。若需區分「長按」與「點擊」,可在 ACTION_DOWN 記錄時間,ACTION_UP 判斷間隔。