SpannableString的基本用法


原文地址:http://www.cnblogs.com/kross/p/3645594.html

 

以前一直好奇QQ的輸入框里面是如何出現表情的,今天看了下這個,心中發出“原來是這樣啊”的感嘆。

通常情況下,我們都是使用字符串類型的變量,直接放置在TextView.setText()的參數里面的。這樣只能單純的輸出字符串。如果要給TextView加上特殊的文本效果,就要使用SpannableString這個類了。

用法如下:

new一個SpannableString對象,將要顯示的字符串作為構造方法的參數傳入。

調用SpannableString.setSpan(Object, int, int, int)方法進行設置。第一個參數為需要設定的樣式,有很多個類可以選擇,都在這里啦:http://developer.android.com/reference/android/text/style/CharacterStyle.html

官方文檔上面那里的直接子類和間接子類都是可以用的樣式。

第二參數是開始的位置,0表示第一個字符

第三個參數是結束的位置

第四個參數是一個表示替換的位置是否會影響開頭和結尾,誒……我試了下發現沒什么變化呢……

然后就是把這個SpannableString對象傳給TextView.setText()方法的參數就好了。

代碼如下:

public class MainActivity extends Activity {

    private TextView tvTest = null;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        tvTest = (TextView)findViewById(R.id.tv_test);
        
        SpannableString ss = new SpannableString("abcdefg");
        
        //前景色
        //ss.setSpan(new ForegroundColorSpan(Color.BLUE), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //背景色
        //ss.setSpan(new BackgroundColorSpan(Color.RED), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //可點擊觸發事件
        //ss.setSpan(new TextClickSpan(), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //觸發事件的話,要加上下面這句話
        //tvTest.setMovementMethod(LinkMovementMethod.getInstance());
        
        //下划線
        //ss.setSpan(new UnderlineSpan(), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //放置圖片
        ss.setSpan(new ImageSpan(this, R.drawable.ic_launcher), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    
        tvTest.setText(ss);
    }
    
    class TextClickSpan extends ClickableSpan {

        @Override
        public void onClick(View widget) {
            Log.i("clickable span", "click");
            Toast.makeText(MainActivity.this, "aaaa", Toast.LENGTH_SHORT).show();
        }
    }
}

其實這個感覺就像是那種替換一樣~

 

原文地址:http://www.cnblogs.com/kross/p/3645594.html 

新浪微博:http://weibo.com/KrossFord


免責聲明!

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



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