SpannableString實現TextView的鏈接效果

来源:http://www.cnblogs.com/Renyi-Fan/archive/2017/08/04/7283157.html
-Advertisement-
Play Games

SpannableString實現TextView的鏈接效果 一、簡介 TextView使用SpannableString設置複合文本TextView通常用來顯示普通文本,但是有時候需要對其中某些文本進行樣式、事件方面的設置。Android系統通過SpannableString類來對指定文本進行相關 ...


SpannableString實現TextView的鏈接效果

一、簡介

TextView使用SpannableString設置複合文本
TextView通常用來顯示普通文本,但是有時候需要對其中某些文本進行樣式、事件方面的設置。Android系統通過SpannableString類來對指定文本進行相關處理,具體有以下功能:

1、BackgroundColorSpan 背景色
2、ClickableSpan 文本可點擊,有點擊事件
3、ForegroundColorSpan 文本顏色(前景色)
4、MaskFilterSpan 修飾效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
5、MetricAffectingSpan 父類,一般不用
6、RasterizerSpan 光柵效果
7、StrikethroughSpan 刪除線(中劃線)
8、SuggestionSpan 相當於占位符
9、UnderlineSpan 下劃線
10、AbsoluteSizeSpan 絕對大小(文本字體)
11、DynamicDrawableSpan 設置圖片,基於文本基線或底部對齊。
12、ImageSpan 圖片
13、RelativeSizeSpan 相對大小(文本字體)
14、ReplacementSpan 父類,一般不用
15、ScaleXSpan 基於x軸縮放
16、StyleSpan 字體樣式:粗體、斜體等
17、SubscriptSpan 下標(數學公式會用到)
18、SuperscriptSpan 上標(數學公式會用到)
19、TextAppearanceSpan 文本外貌(包括字體、大小、樣式和顏色)
20、TypefaceSpan 文本字體
21、URLSpan 文本超鏈接

 

SpannableString的類架構(部分)

二、方法

1)用SpannableString給TextView對象設置link點擊事件方法

第一步:設置string內容

String text="點擊我打開activity";

第二步:為string內容添加各種屬性,
在這裡是擁有SpannableString的ClickableSpan屬性

SpannableString spannableString=new SpannableString(text);

spannableString.setSpan(new ClickableSpan() {中間省略Onclic方法}, 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

第三步:在TextView中添加上面設置好的文本內容

tv_spannableString.setText(spannableString);

第四步:設置滑鼠點擊響應事件

這一步在html方法中必須要,現在沒有指定autoLink,感覺也是必須要,沒這句話編譯出錯

spannableString.setSpan(new ClickableSpan() {中間省略Onclic方法}, 3, text.length(), 

tv_spannableString.setMovementMethod(LinkMovementMethod.getInstance());

 

2)SpannableString為控制項設置各種屬性的方法

1、將string類型轉化為SpannableString類型對象

SpannableString spannableString=new SpannableString(text);

2、對SpannableString對象執行setSpan方法

spannableString.setSpan(new ClickableSpan() {中間省略Onclic方法}, 3, text.length(), }, 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

說明,設置點擊事件是使用的ClickableSpan() ,如果想要設置其他效果就用其它的好了,

就是最上面列舉的那麼多

 

三、代碼實例

效果圖

點擊之後出現

 

代碼:

fry.ActivityDemo3

 1 package fry;
 2 
 3 import java.lang.reflect.Field;
 4 
 5 import com.example.textViewDemo1.R;
 6 import com.example.textViewDemo1.R.id;
 7 
 8 import android.app.Activity;
 9 import android.content.Intent;
10 import android.graphics.drawable.Drawable;
11 import android.os.Bundle;
12 import android.text.Html;
13 import android.text.Html.ImageGetter;
14 import android.text.SpannableString;
15 import android.text.Spanned;
16 import android.text.method.LinkMovementMethod;
17 import android.text.style.ClickableSpan;
18 import android.view.View;
19 import android.widget.TextView;
20 
21 public class ActivityDemo3 extends Activity{
22     private TextView tv_spannableString;
23     @Override
24     protected void onCreate(Bundle savedInstanceState) {
25         // TODO Auto-generated method stub
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.activity03);
28         setTitle("TextViewDemo3");
29         tv_spannableString=(TextView) findViewById(R.id.tv_spannableString);
30         /*
31          * 用SpannableString給TextView對象設置link點擊事件方法
32          * 第一步:設置string內容
33          */
34         String text="點擊我打開activity";
35         /*
36          * 第二步:為string內容添加各種屬性,
37          * 在這裡是擁有SpannableString的ClickableSpan屬性
38          */
39         
40         /*
41          * SpannableString為控制項設置各種屬性的方法
42          * 1、將string類型轉化為SpannableString類型對象
43          * 2、對SpannableString對象執行setSpan方法
44          */
45         SpannableString spannableString=new SpannableString(text);
46         spannableString.setSpan(new ClickableSpan() {
47             
48             @Override
49             public void onClick(View arg0) {
50                 // TODO Auto-generated method stub
51                 Intent intent=new Intent(ActivityDemo3.this,ActivityDemo2.class);
52                 startActivity(intent);
53             }
54         }, 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
55         /*
56          * Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
57          * exclusive是 獨有的 意思
58          * 這個屬性即是效果獨有,不影響前後
59          */
60         
61         /*
62          * 第三步:在TextView中添加上面設置好的文本內容
63          */
64         tv_spannableString.setText(spannableString);
65         /*
66          * 第四步:設置滑鼠點擊響應事件
67          * 這一步在html方法中必須要,現在沒有指定autoLink,感覺也是必須要
68          * 沒這句話編譯出錯
69          */
70         tv_spannableString.setMovementMethod(LinkMovementMethod.getInstance());
71     }
72 }

/textViewDemo1/res/layout/activity03.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6     <TextView 
 7         android:id="@+id/tv_spannableString"
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         />
11 
12 </LinearLayout>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init]; [keyboardDoneButtonView sizeToFit]; UIBarButtonItem *doneButton = [[UIBarButtonItem allo... ...
  • EditText實現輸入限制和校驗 一、方法 1)輸入限制 1、通過android:digits限制只能輸入小寫abc android:digits="abc" 2、通過android:inputType限制只能輸入數字 android:inputType="number" 在android:inp ...
  • EditText實現輸入表情 一、簡介 editText是TextView的子類,TextView能用的工具EditText都能用,這裡就是editText利用SpannableString的ImageSpan實現輸入表情的功能 類結構圖: 二、方法 1)EditText利用SpannableStr ...
  • iOS精選源碼 iOS優質博客 前言最近因為工作原因遷移到了北京,大致有兩周時間。入職也大概有一周時間,工作內容與APM相關,包括改進與攻剋新監控方案。雖然入職時間善短,但是龐大的用戶量下,即便是不到百分之一的卡頓率仍然影響到了巨大的用戶。如何改進現有的卡頓監控方案是目前我在思考的問題。ANR回顧市 ...
  • Android精選源碼 Android優質博客 為什麼會選用Kotlin關於 Google 為什麼會選擇 Kotlin,我認為有兩方面的原因。為了逐漸擺脫專利流氓Oracle。從去年的轉向OpenJDK,到現在的支持Kotlin作為官方語言,某種意義是為了擺脫藉由9行代碼敲詐獲取天價賠償的Oracl ...
  • TextView實現跑馬燈效果 一、方法 這裡我們用兩種方法來實現跑馬燈效果,雖然實質上是一種 實質就是: 1、TextView調出跑馬燈效果 2、TextView獲取焦點 第一種: 1、TextView調出跑馬燈效果 android:ellipsize="marquee" 2、TextView獲取 ...
  • InflateException:Bin file line #19:Error inflating class MyTextView 一、錯誤簡介 為了實現TextView的跑馬燈效果,我自己寫了一個MyTextView的類繼承TextView,結果在layout的XML頁面調用的時候出現錯誤。 ...
  • 一,代碼。 二,輸出。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...