1. 程式人生 > >Android設定TextView部分文字變色及點選事件

Android設定TextView部分文字變色及點選事件

首先要想實現文字變色以及點選,都需要使用到SpannableStringBuilder,例項化該類也很簡單,只需將你想要處理的字串當做引數

SpannableStringBuilder spannable = new SpannableStringBuilder(content);

那麼下邊便是開始實現文字變色了,呼叫SpannableStringBuilder的setSpan方法,該方法有四個引數:

Object what: 設定的span型別,顏色,粗體,下劃線等等

int start: 開始作用的索引,包括start,索引從0開始

int end: span結束作用的索引,不包括end

int flags: 有四個取值,分別表示是否作用於span範圍前後新增的字元

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE,前後都不作用

Spannable.SPAN_EXCLUSIVE_INCLUSIVE,後面作用

Spannable.SPAN_INCLUSIVE_EXCLUSIVE,前面作用

Spannable.SPAN_INCLUSIVE_INCLUSIVE,前後都作用

可以這樣區分,SPAN之後第一個字母是前,第二個字母是後,EXCLUSIVE不包括,INCLUSIVE包括.

spannable.setSpan(newForegroundColorSpan(Color.RED),startIndex,endIndex,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(spannable);

接下來是指定文字的點選事件設定,步驟與設定文字變色基本相同,只需要ClickableSpan這個類來處理點選事件,我們先寫一個類,繼承ClickableSpan
private class TextClick extends ClickableSpan{ @Override public void onClick(View widget) { //在此處理點選事件 } }
接下來又是setSpan這個方法,但第一個引數換成我們繼承ClickableSpan類的例項化,其它三個引數同上,需要注意的是setMovementMethod這個方法一定要記得設定,不然點選是不會生效的

//這個一定要記得設定,不然點選不生效
textView.setMovementMethod(LinkMovementMethod.getInstance());
spannable.setSpan(new TextClick(),startIndex,endIndex , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

那麼接下來出現了一個問題,我既要讓文字可點選,但是又要指定它的顏色該怎麼辦呢。我們檢視ClickableSpan的原始碼會發現,它除了onClick之外,還有updateDrawState

@Override 
public void updateDrawState(TextPaint ds) { 
    ds.setColor(ds.linkColor); 
    ds.setUnderlineText(true); 
}

它的實現很簡單,一目瞭然,就是設定文字顏色以及是否有下劃線。那麼這個問題就迎刃而解了,在我們的TextClick重寫updateDrawState,即是

private class TextClick extends ClickableSpan{ 
@Override 
public void onClick(View widget) { 
     //在此處理點選事件
 } 
@Override
 public void updateDrawState(TextPaint ds) { 
      ds.setColor(Color.RED);
    } 
}

SpannableStringBuilder builder = new SpannableStringBuilder(textView.getText().toString());  
  
//ForegroundColorSpan 為文字前景色,BackgroundColorSpan為文字背景色  
ForegroundColorSpan redSpan = new ForegroundColorSpan(Color.RED);  
ForegroundColorSpan whiteSpan = new ForegroundColorSpan(Color.WHITE);  
ForegroundColorSpan blueSpan = new ForegroundColorSpan(Color.BLUE);  
ForegroundColorSpan greenSpan = new ForegroundColorSpan(Color.GREEN);  
ForegroundColorSpan yellowSpan = new ForegroundColorSpan(Color.YELLOW);  
  
  
  
builder.setSpan(redSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
builder.setSpan(whiteSpan, 1, 2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);  
builder.setSpan(blueSpan, 2, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
builder.setSpan(greenSpan, 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
builder.setSpan(yellowSpan, 4,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  

設定文字部分顏色的第二種方法:

String str = "這是"+"<font color = "#3f51b5">"+"改變的顏色"+"</font>";

tv.settxt(Html.fromHtml(str));

案例:

// 設定agree textview
        String str = getResources().getString(R.string.t_register_tip7);
        SpannableStringBuilder spannable = new SpannableStringBuilder(str);
        //spannable.setSpan(new ForegroundColorSpan(Color.RED),34,38, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannable.setSpan(new TextClick(), 34, 38, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        m_tvTip3.setMovementMethod(LinkMovementMethod.getInstance());
        m_tvTip3.setText(spannable);
private class TextClick extends ClickableSpan{
    @Override
    public void onClick(View widget) {
        //在此處理點選事件
        Intent intent = new Intent(m_context, PrivacyPolicyActivity.class);
        // 開啟新的Activity,關閉當前Activity
        startActivity(intent);
        // 切換動畫,向左方向推進
        overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);
    }
    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setColor(Color.RED);
    }
}

完!!!

相關推薦

Android設定TextView部分文字變色事件

首先要想實現文字變色以及點選,都需要使用到SpannableStringBuilder,例項化該類也很簡單,只需將你想要處理的字串當做引數 SpannableStringBuilder spannable = new SpannableStringBuilder(conte

Android 部分文字顏色大小事件的處理

Android開發中,經常會有這樣一個需求,在一段文字中,為突出顯示其中幾個文字,會採用不同的顏色,大小來顯示,並且有可能需要點選處理。先將自己平常用到的幾種方法總結如下。 1. 直接利用佈局實現 2. 利用富文字標籤實現 3. webview

Android實現TextView部分文字監聽單擊事件

由於專案需要,在Android上實現TextView部分文字監聽單擊事件效果如下: 網上找了一些資料,我自己加工一下,生成了一個工具類,使用非常方便,程式碼如下: TextViewUtil.getInstance().setPartOnClickListener(mTv

Android TextView中新增連結並在連結部分字型變色

這麼一個效果:一行文本當中 前面顯示黑色顏色的“超文字:”,後面顯示紅色顏色的“http://www.baidu.com” 並且要求紅色字型的部分可以點選,有響應的點選事件進行處理,你該如何實現? 最簡單的實現方法,兩個TextView ,第一個顯示黑色字型的“超

Android設定TextView部分字型顏色和事件

  最近接到一個新需求,在一個TextView中實現部分字型的顏色不同於其它字型,且點選該部分文字時實現跳轉的功能。一開始想著用多個TextView連起來實現功能,優化程式碼時再想想,這也太弱智了點兒吧!   果斷Google搜尋一下別的Coder是怎麼實現的,

設定TextView部分文字下劃線並響應事件(SpannableString)

實現效果 textview中改變《服務條款》的顏色、增加下劃線。 實現關鍵點: SpannableString的使用 SpannableString spanText=new SpannableString(getString(R.string.d

android 設定TextView文字 上下左右 圖示

android屌絲估計都知道,TextView是個文字控制元件,但是有的android新手可能還不知道TextVeiw還可以給文字的上下左右設定圖示,下面我們就來說說怎麼給TexteView設定圖示 給TextView設定圖示有兩種方法:一種是在xml佈局檔案中設定,一種是

AndroidTextView 區域性文字變色

TextView 對於富文字效果的實現支援不支援呢?比如“區域性文字顏色的變動”,“區域性字型的變動” 一、需求效果 二、解決方案 針對這類問題,Android提供了 SpannableStringBuilder,方便我們自定義富文字的實現。 text

Android 中SpannableStringBuilder控制區域性文字顏色和事件

直接上程式碼 package com.lhl.qsmm.maskguidetest; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.s

android clickspan文字與本身事件衝突問題

http://stackoverflow.com/questions/16792963/android-clickablespan-intercepts-the-click-event 這裡邊有詳細的解決方法與解釋

文字新增顏色大小事件,防止最後一句斷行顯示。

本文章為了方便引用YYText第三方對富文字的顯示以及點選事件進行自定義,當然也可以使用自帶的方法進行定製,不過自帶的方法使用起來較為繁瑣。例如點選事件,自帶的方法我們可以選擇使用一個隱藏的UIButton進行實現,也可以給文字新增連結,在連結觸發的代理中進行擷取操作,做出

同一個 TextView 設定多個樣式多個事件

先看樣式圖片( 評論內容為一個 TextView ): xml 檔案中不給出程式碼了,就是一個容器裡面有一個 TextView ; 下面是 Activity 程式碼:         String oneName = "直男";//第一個人         Stri

Android Button 常用屬性設定,圓角,邊框,事件

<Button <!--設定代表此button的id--> android:id="@+id/btn" android:layout_width="200dp" andro

Span使用之文字高亮事件

由於工作上的需求,類似於淘寶京東在獲取物流資訊時電話號碼高亮顯示,並觸控和點選電話號碼時跳轉到撥打電話.剛開始一時沒想到什麼好的方法,最後通過查詢資料,看到了Span完全能夠實現需求,並且使用效果好的不

Android listview子控制元件的的事件(轉)

1.先看圖,是否是你想要的   2.佈局檔案<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi

highcharts餅圖事件

       highcharts是一個javascript圖表庫,支援曲線圖、柱狀圖、餅圖、散點圖等。具體的demo可檢視官方網站:highcharts示例        使用

給元素設定了固定座標後,事件失效

<body> <div class="foot"> <div class="price">價格</div> <div class="go-time choosed">出發 <span>早</spa

Android完美處理RecyclerView實現item條目事件處理

前言: RecyclerView並沒有像ListView那樣提供了OnItemClick,OnItemLongClick等事件回撥介面,所以,我們需要自己寫介面去進行實現。 正題 ①、建立介面類OnRecyclerViewClickListener /** * Recy

Android Toolbar遮擋按鈕(view)事件,怎麼穿透呢

今天有朋友問我這個問題,我找到一個可行的方案,給大家分享一下 toolbar.setOnTouchListener(new View.OnTouchListener() { @Override public boolean

android FrameLayout響應了下層view的事件

解決方法  設定clickable為true <FrameLayout <span style="background-color: rgb(255, 0, 0);">android:clickable="true"</s