1. 程式人生 > >TextView程式碼動態實現字型不同大小樣式風格顏色

TextView程式碼動態實現字型不同大小樣式風格顏色

看到一篇文章,在程式碼中動態實現TextView不同的顯示樣式風格顏色,感覺以後可能用的到,做個記錄,方便以後使用。

首先是效果圖:


程式碼動態實現了同一個TextView控制元件,不同位置字型的不同顯示風格和效果。

一、

MainActivity程式碼:

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.BulletSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.ScaleXSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.TypefaceSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView;


public class MainActivity extends Activity {
   private TextView textview;
   
   @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		textview = (TextView) findViewById(R.id.textView01);
		
		//建立一個 SpannableString物件
		SpannableString msp = new SpannableString("正常字型字型大小一半兩倍前景色背景色正常粗體斜體粗斜體下劃線刪除線x1x2電話郵件網站簡訊彩信地圖X軸綜合/bot");
		//設定字型大小(絕對值,單位:畫素)
		msp.setSpan(new TypefaceSpan("monospace"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		msp.setSpan(new TypefaceSpan("serif"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
  
		 //設定字型大小(絕對值,單位:畫素)   
        msp.setSpan(new AbsoluteSizeSpan(20), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
        msp.setSpan(new AbsoluteSizeSpan(20,true), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //設定字型大小(相對值,單位:畫素) 引數表示為預設字型大小的多少倍   
        msp.setSpan(new RelativeSizeSpan(0.5f), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //0.5f表示預設字型大小的一半   
        msp.setSpan(new RelativeSizeSpan(2.0f), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //2.0f表示預設字型大小的兩倍   
   
        //設定字型前景色   
        msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //設定前景色為洋紅色   
   
        //設定字型背景色   
        msp.setSpan(new BackgroundColorSpan(Color.CYAN), 15, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //設定背景色為青色   
   
        //設定字型樣式正常,粗體,斜體,粗斜體   
        msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //正常   
        msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗體   
        msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //斜體   
        msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗斜體   
   
        //設定下劃線   
        msp.setSpan(new UnderlineSpan(), 27, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
   
        //設定刪除線   
        msp.setSpan(new StrikethroughSpan(), 30, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   
   
        //設定上下標   
        msp.setSpan(new SubscriptSpan(), 34, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下標   
        msp.setSpan(new SuperscriptSpan(), 36, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上標               
   
        //超級連結(需要新增setMovementMethod方法附加響應)   
        msp.setSpan(new URLSpan("tel:4155551212"), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //電話   
        msp.setSpan(new URLSpan("mailto:
[email protected]
"), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //郵件 msp.setSpan(new URLSpan("http://www.2cto.com"), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //網路 msp.setSpan(new URLSpan("sms:4155551212"), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //簡訊 使用sms:或者smsto: msp.setSpan(new URLSpan("mms:4155551212"), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //彩信 使用mms:或者mmsto: msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //地圖 //設定字型大小(相對值,單位:畫素) 引數表示為預設字型寬度的多少倍 msp.setSpan(new ScaleXSpan(2.0f), 49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示預設字型寬度的兩倍,即X軸方向放大為預設字型的兩倍,而高度不變 //設定字型(依次包括字型名稱,字型大小,字型樣式,字型顏色,連結顏色) // ColorStateList csllink = null; // ColorStateList csl = null; // XmlResourceParser xppcolor=getResources().getXml (R.color.color); // try { // csl= ColorStateList.createFromXml(getResources(),xppcolor); // }catch(XmlPullParserException e){ // // TODO: handle exception // e.printStackTrace(); // }catch(IOException e){ // // TODO: handle exception // e.printStackTrace(); // } // // XmlResourceParser xpplinkcolor=getResources().getXml(R.color.linkcolor); // try { // csllink= ColorStateList.createFromXml(getResources(),xpplinkcolor); // }catch(XmlPullParserException e){ // // TODO: handle exception // e.printStackTrace(); // }catch(IOException e){ // // TODO: handle exception // e.printStackTrace(); // } // msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 51, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 51, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //設定專案符號 msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0 ,msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一個引數表示專案符號佔用的寬度,第二個引數為專案符號的顏色 //設定圖片 Drawable drawable = getResources().getDrawable(R.drawable.imageview_a02); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); msp.setSpan(new ImageSpan(drawable), 53, 57, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textview.setText(msp); textview.setMovementMethod(LinkMovementMethod.getInstance()); } }

佈局檔案activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="@string/hello_world" />

</LinearLayout>
最後附上程式碼下載地址:demo下載

相關推薦

TextView程式碼動態實現字型不同大小樣式風格顏色

看到一篇文章,在程式碼中動態實現TextView不同的顯示樣式風格顏色,感覺以後可能用的到,做個記錄,方便以後使用。 首先是效果圖: 程式碼動態實現了同一個TextView控制元件,不同位置字型的不同顯示風格和效果。 一、 MainActivity程式碼: import

Android程式碼動態設定字型大小

//給一個id為name的TextView設定字型大小  TextView mName = (TextView)findViewById(R.id.name);  mName.setTextSize(22);  開始學Android的時候,設定字型大小,無非用上面的程

RecycleView進階:使用GridLayoutManager.SpanSizeLookup來動態實現具有不同尺寸的Item

前言 現在基本所有的安卓開發都使用RecycleView替換了ListView和GridView,RecycleView使用的靈活性以及其功能的強大相信大家也深有感觸,使用RecycleView我們也可以很方便的實現一些複雜佈局,例如下面這樣的頁面: 該頁面中,同時包含列表,2列的網格

程式碼動態設定ProgressBar進度條樣式

1、設定水平顯示進度 pb = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal); 2、 設定背景顏色 pb.setBackgroundCol

Android 程式碼動態設定字型大小-TextView.SetTextSize()

關鍵程式碼  - setTextSize(TypedValue.COMPLEX_UNIT_PX,15); //22畫素  - setTextSize(TypedValue.COMPLEX_UNIT_SP,15); //22SP  - setTextSize(Type

TextView 動態設定字型大小和加粗

//字型大小為16,並且加粗 tv_1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); tv_1.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));

Android之TextView動態設定字型顏色大小(二)

 之前我們寫過怎麼在TextView裡程式碼修改字型顏色怎麼修改,那是通過 SpannableString 渲染來修改的今天介紹一種在string.xml中修改字型顏色的方法第一步:在string.xm

dialog自定義樣式程式碼動態改變位置及大小

dialog自定義的樣式屬性 <style name="wait_dialog_style" parent="@android:style/Theme.Dialog"> &l

Android 中同一個TextView設定不同大小字型

今天遇到一個需求,價格的第一個字要比後面的大,之前有遇到過用spannable設定不同字母的顏色,所以想著應該也可以設定不同大小吧,現整理一下基本用法方便以後使用。 price = Tools.formatToSepara(item.price); i

Android的TextView中顯示不同大小字型的玩法

方法一、用Spannable類設定字型大小,背景顏色,字型顏色等。 private void doSpannableTextView() { mTvSpannableString.setText("SpannableString_Text"); Spannable

Android TextView 動態改變字型顏色大小

一、概述 1、SpannableString、SpannableStringBuilder與String的關係 首先SpannableString、SpannableStringBuilder基本上與String差不多,也是用來儲存字串,但它們倆的特殊就在於有一個S

【Android】TextView不同大小字型如何上下垂直居中?

前言 在客戶端開發中,我們往往需要對一個TextView的文字的部分內容進行特殊化處理,比如加粗、改變顏色、加連結、下劃線等。iOS為我們提供了AttributedString,而Android則提供了SpannableString。 在Android的an

算法(第四版)學習筆記之java實現可以動態調整數組大小的棧

length pub move sta gen font -c @override lifo 下壓(LIFO)棧:可以動態調整數組大小的實現 import java.util.Iterator; public class ResizingArrayStack&l

理解什麼是動態代理及程式碼實現

jdk動態代理是由java內部的反射機制來實現的,cglib動態代理底層則是藉助asm來實現的。總的來說,反射機制在生成類的過程中比較高效,而asm在生成類之後的相關執行過程中比較高效(可以通過將asm生成的類進行快取,這樣解決asm生成類過程低效問題)。還有一點必須注意:jdk動態代理的應

CSS實現自適應不同大小螢幕的背景大圖的兩種方法(轉自簡書)

CSS實現自適應不同大小螢幕的背景大圖的兩種方法 一張清晰漂亮的背景圖片能給網頁加分不少,設計師也經常會給頁面的背景使用大圖,我們既不想圖片因為不同解析度圖片變形,也不希望當在大屏的情況下,背景有一塊露白,簡而言之,就是實現能自適應螢幕大小又不會變形的背景大圖,而且背景圖片不會隨著

iOS開發—使用TYAttributedLabel實現字型大小顏色各異並且帶連結的文字

TYAttributedLabel是一個強大的屬性文字控制元件。它支援富文字、圖文混排顯示;它支援行間距、字間距、自適應高度、指定行數;它支援新增高度自定義文字屬性,支援新增屬性文字、自定義連結,新增高亮效果顯示(文字和背景);它還支援新增UIImage和UIView控制元件。  

TextView加上多彩效果 改變部分字型大小顏色

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android TextView動態設定字型顏色選擇器

Android 在用字型顏色選擇器時: 一種在xml檔案中直接設定textColor通常會用這種情況,這種情況字型顏色Selector挺好用的: android:textColor="@color/selector_delete_color" 然而,在程式碼中設定字型顏色選擇器

程式碼動態新增元件型別、大小 、方位 (addView)

文章目錄 1、功能介紹 2、程式碼結構 3、activity_main.xml 檔案 4、功能程式碼 1、功能介紹 在程式碼裡動態新增我們需要的元

關於動態修改easyui datagrid行樣式不同樣式覆蓋優先順序問題(class)

easyui->datagrid->rowStyler 釋義:直接return class實際在html中是疊加class,並不會移除已有的自定義class,這會導致class的優先順序是根據在css檔案中的先後來判斷優先順序,達不到新的覆蓋舊的的效果,故此處先移除自定義class,再載入新cl