【Android開發日記】之基礎篇(一)——TextView+SpannableStringBuilder

TextView是控件中最最基礎的一個控件,也是最簡單的一個控件。但若是僅此,我不會專門爲TextView寫一篇文章。最近發現了Android中有趣的一個類,那就是標題上寫的SpannableStringBuilder。那麼它是個什麼東西呢?它能夠爲你的文字加上各類效果,像變色,各類符號,斜體,圖片替換,高亮等等。若是想要文字加上一點常見的效果,咱們大可沒必要再本身去寫一個自定義的View,使用SpannableStringBuilder就能知足你的需求了。html

 

1、TextViewandroid

首先是TextView的準備,跟日常的同樣,先在佈局文件中寫好控件,再在代碼中經過id得到引用。
app

<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:orientation="vertical"
    >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text_view" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button" />

</LinearLayout>

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    tv = (TextView)findViewById(R.id.textView1);
    bt = (Button)findViewById(R.id.button1);
    bt.setOnClickListener(this);
    
}

2、SpannableStringBuilder編輯器

SpannableStringBuilder其實講白了就是一個文本編輯器,經過套用不一樣的模式來改變文本的樣子,其主要方法爲
ide

    /**
     * Mark the specified range of text with the specified object.
     * The flags determine how the span will behave when text is
     * inserted at the start or end of the span's range.
     */
    public void setSpan(Object what, int start, int end, int flags) {
        setSpan(true, what, start, end, flags);
    }

 

第一個參數是一個實現ParcelableSpan接口的一個類;工具

第二三個參數就是要改變文本的位置,起始點和終點;佈局

第四個參數是用來對第二個和第三個參數進一步限制和說明的。ui

 

3、文本的例子this

  1. 例子:經過點擊按鈕來改變文字
  2. 其中關鍵的點擊事件的代碼以下
    /*
         * 注意事項: SpannableStringBuilder.setSpan (new
         * ForegroundColorSpan(Color.RED), 1, 3,
         * Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 第一個參數:顏色 第二個參數:開始位置 第三個參數:終止位置
         * 第三個參數:SPAN_EXCLUSIVE_INCLUSIVE.用來對第二個和第三個參數進一步限制和說明
         * 此處表示不包含1,可是包含3.從字面意思也很好理解
         */
        @Override
        public void onClick(View v) {
            String str = "Hello Cpacm! \nA preservation of the memory";
            SpannableStringBuilder builder = new SpannableStringBuilder(str);
            //設置顏色
            builder.setSpan(new ForegroundColorSpan(Color.RED), 0, 5,
            // setSpan時須要指定的 flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(先後都不包括).
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //超連接
            builder.setSpan(new URLSpan("https://www.google.com"), 6, 12,
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //粗斜體
            builder.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 12, 15,
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //刪除線
            builder.setSpan(new StrikethroughSpan(), 16, 29,
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //圖片替換文字
            Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
            d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            // 建立ImageSpan
            ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
            // 用ImageSpan替換文本
            builder.setSpan(span, 29, 31, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    
            builder.setSpan(new ForegroundColorSpan(Color.RED), 31, 36,
                    Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            //刪除文字
            builder.delete(36, 42);
            //添加文字
            builder.append("thing");
            //將文字賦予TextView
            tv.setText(builder);
        }

     

  3. 固然Span的類型不止這麼幾種,查了一下API,還有不少類型的Span,以下圖。

    用法都是同樣的
  4. 運行截圖
        

 

4、結束語google

說來慚愧,很久沒有更新這個系列了,也是一直沒有機會弄Android界面的緣由。今天看到一個文字變化的工具類,因此就想着把TextView作了一下。

 
 

========================================

 

做者:cpacm
出處:(http://www.cnblogs.com/cpacm/p/4099031.html

相關文章
相關標籤/搜索