站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Android 安卓

【APP/Android】如何增加 TexView 超連結 Hyperlink 功能

Common 前言

  1. TextView 自動判斷是否有 Email、電話或者網址
  2. 若使用網址,於 AndroidManifest.xml 增加連接網路的權限:
    <uses-permission android:name="android.permission.INTENT"/>


方法1:Layout 前端

說明

  • 建議將網址字串放置於 res/value/string.xml
    <
    <?xml version="1.0" encoding="utf-8"?> <resources> <string name="test">https://www.google.com.tw/</string> </resources>
  • autoLink 種類
    • web
    • email
    • phone
    • map:有固定的地址格式,請參考延伸閱讀
      • 例如:“111 8th Avenue, New York, NY” 包含代表 “111” (街道號碼)、“8th Avenue” (路線)、“New York” (城市)和 “NY” (美國州別)的個別地址元件
    • all, none
  • 於 TextView 加入
    • android:autoLink="web"
    • android:text="@string/test"

Example 範例

<TextView android:id="@+id/test" android:layout_width="match_parent" android:layout_height="wrap_content" android:autoLink="web" android:gravity="center" android:text="@string/test" />

方法2:Java class 後端

說明

  • setAutoLinkMask():設定 autoLink 種類,其常數屬於 Linkify 類別
    • WEB_URLS
    • EMAIL_ADDRESSES
    • PHONE_NUMBERS
    • MAP_ADDRESSES
      • 該常數 API level 高於 P 棄用
    • ALL
  • 於 Java class 加入
    • setAutoLinkMask()
    • setMovementMethod()

Example 範例

  • Layout 前端
<TextView android:id="@+id/test" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="@string/test" />
  • Java Class 後端
TextView textView = (TextView) findViewById(R.id.test); textView.setAutoLinkMask(Linkify.WEB_URLS); textView.setMovementMethod(LinkMovementMethod.getInstance());

說明

  • 將網址字串改為:<a href='https://www.google.com.tw/'>google</a>
  • 於 Java class 加入
    • setMovementMethod()

Example 範例

  • string.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="test"><a href='https://www.google.com.tw/'>google</a></string> </resources>
  • Layout 前端
<TextView android:id="@+id/test" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="@string/test" />
  • Java Class 後端
TextView textView = (TextView) findViewById(R.id.test); textView.setMovementMethod(LinkMovementMethod.getInstance());

Extensive Reading 延伸閱讀

  1. Geocoding API
    https://developers.google.com/maps/documentation/geocoding/intro?hl=zh-tw
  2. TextView autoLink小技巧 - 从源码的角度理解并解决autoLink的所有大坑
    https://www.jianshu.com/p/d3bef8449960

Reference 參考資料

  1. Linkify 官方文件
    https://developer.android.com/reference/android/text/util/Linkify
  2. MovementMethod 官方文件
    https://developer.android.com/reference/android/text/method/MovementMethod
  3. 在Android實作HTML TextView與AutoLink使用的建議方式
    https://magiclen.org/android-html-textview/

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽