首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TextView 同時響應鏈接點擊與整體點擊事件的實現

     編輯:程式設計綜合問答

問題

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 判斷間隔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved