Android TextView 常用技巧


TextView在Android中實現文字說明等功能,基本的使用都很簡單,那么除了基本展示文字的使用,我們還能夠經常使用TextView實現如下的功能:

1.顯示豐富的文本(URL、字體大小、顏色等)

TextView中預定了一些類似Html的標簽,通過標簽可以使TextView顯示不同的顏色、大小、字體的文字。

  • <font> : 設置顏色和字體
  • <big>: 設置大號
  • <small>: 設置小號
  • <i><b>: 斜體、粗體
  • <a>: 鏈接地址
  • <img>: 插入圖片

使用這些標簽可以使用Html.fromHtml方法。

2.將文本中的URL地址、郵箱地址、電話產生超鏈接的效果

使用android:autoLink來設置,首先在的layout文件夾里面TextView控件增加

android:autoLink="all"

然后在Java中進行設置:

textview.setMovementMethod(LinkMovementMethod.getInstance());

這樣展示出現的內容就可以出現超鏈接的效果。例如,在TextView點擊網址鏈接后,就可以調轉到瀏覽器並打開響應的鏈接。內容可以是Html格式的內容,也可以是String格式的,在使用Html顯示超鏈接的時候,必須保證添加上協議好,例如:http://。否則在識別網址的時候,不加的話,可能會判斷為Activity,然后導致崩潰。使用String格式的內容,在TextView添加setAutoLinkMask(Linkify.ALL)設置之后,可以不加協議識別出來鏈接,但是推薦還是加上。而這兩種方法,都得設置一下setMovementMethod,才會跳轉。   

3.TextView顯示表情圖像和文字

如果需要在TextView里面展示res資源里面的圖片的話,可以通過編寫html內容,並通過Html.fromHtml方法來將內容轉換為CharSequence來顯示。

顯示的核心代碼:

String html = "圖像1<image='image1'>";  // 其中image1就是圖片在drawable的name
Html.fromHtml(html, new ImageGetter() {

    @Overrride
    public Drawable getDrawable(String source) {
         Drawable drawable = getResource.getDrawable(getResourceId(source));
         return drawable;
    }
}

public int getResourceId(String name) {
	try {
		// 根據資源ID的變量名獲得Field的對象,使用反射機制來實現的
		Field field = me.renhui.drag_sort_listview.R.drawable.class.getField(name);
		// 取得並返回資源的id的字段(靜態變量)的值,使用反射機制
		return Integer.parseInt(field.get(null).toString());
	} catch (Exception e) {
		e.printStackTrace();
	}
	return 0;
} 

4.TextView單擊鏈接觸發點擊事件(本例事件是彈出Activity也可以替換為其他事件)

通過對TextView的內容設置span來給TextView設置點擊事件,這樣的話就能夠通過點擊點擊TextView中的鏈接來彈出Activity

String text1 = "彈出Activity1";
String text2 = "彈出Activity2";
SpannableString spannableString  = new SpannableString (text1);
SpannableString spannableString2  = new SpannableString (text2);

spannableString.setSpan(new ClickableSpan() {
    @Overrride
    public void onclick(View widge) {
          // TODO 實現彈出邏輯
    }    
}, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 

5.TextView實現跑馬燈的效果

基本的實現方式就是在xml設置TextView的屬性:

android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"   // 不添加這個屬性不能成功跑動起來 

6. TextView 實現刪除線的效果

設置刪除線的方式如下:

通過按位或運算符|,將 TextView 原本的 Flags 屬性和刪除線一塊設置。setPaintFlags內會對 TextView 進行重繪:

tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

獲取畫筆后設置屬性,重繪 TextView 。此方式有個問題,會把 TextView 原本的 Flags 屬性替代,例如抗鋸齒等。仔細查看,你會發現通過這種方式,文字有了鋸齒。此時需要添加如下代碼來優化一下:

tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
tv.invalidate();

TextView 取消刪除線有兩種方式:

方式一(推薦)

先對 Paint.STRIKE_THRU_TEXT_FLAG 屬性取反,再用按位與運算符&,除去了刪除線屬性並保留了 TextView 原本的 Flags 屬性。setPaintFlags內會對 TextView 進行重繪。

tv.setPaintFlags(tv.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

方式二:

獲取畫筆后,清空 Flags 屬性,再重繪 TextView 。此方式有個問題,會把 TextView 原本的所有 Flags 屬性清空,例如抗鋸齒等。仔細查看,你會發現通過這種方式,文字有了鋸齒;

tv.getPaint().setFlags(0);
tv.invalidate();

7. TextView 出現異常換行的處理方法

   // 半角轉換成全角
   private String toSBC(String input) {
        char c[] = input.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == ' ') {
                c[i] = '\u3000';
            } else if (c[i] < '\177') {
                c[i] = (char) (c[i] + 65248);
            }
        }
        return new String(c);
    }

  
    // 全角轉換成半角
    private String toDBC(String input) {
        char[] c = input.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == 12288) {
                //全角空格為12288,半角空格為32
                c[i] = (char) 32;
                continue;
            }
            if (c[i] > 65280 && c[i] < 65375)
                //其他字符半角(33-126)與全角(65281-65374)的對應關系是:均相差65248
                c[i] = (char) (c[i] - 65248);
        }
        return new String(c);
    }

 8. TextView 一行,最多顯示10個字符,剩余的用...代替

mTitleTxt.setSingleLine(); // 單行顯示
mTitleTxt.setMaxEms(10); // 最大十個字符
mTitleTxt.setEllipsize(TextUtils.TruncateAt.END); // 剩余的以...結尾

9. TextView 展示字母的時候,明明是小寫,但界面上看到的都是大寫 解決方案

添加屬性:

android:textAllCaps="false"

這個問題也存在於Button等其他控件,解決的方案同TextView。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM