2012年3月31日土曜日

Spannable.SPAN_COMPOSING sample code

Spannable.SPAN_COMPOSING sample code

Spannable.SPAN_COMPOSINGは、既存の装飾を削除し、新たに装飾を設定するフラグです。

ただし、「既存の装飾を削除」にクセがあります。これに関してSpannable.SPAN_COMPOSING その2に書いておきました。

sample codeは下記のとおりです。
public class TextViewActivity extends Activity

    implements
    OnClickListener
    {
    final int iMaxChar = 300;
    int iCounter;
    Button bu;
    TextView tv;
    SpannableString ss;
    BackgroundColorSpan spanBC;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        int i;
        char c = '亜';
        StringBuilder sb;
        
        bu = (Button)findViewById(R.id.Button);
        bu.setOnClickListener(this);
        tv = (TextView)findViewById(R.id.TextView);
        
        //表示する文字列の作成
        sb = new StringBuilder();
        for(i=0; i<iMaxChar; i++) sb.append(c++);
        
        //装飾の作成
        ss = new SpannableString(sb.toString());
        spanBC = new BackgroundColorSpan(0xff880000);
        
        //第ゼロ番目の文字に装飾を施す。
        iCounter = 0;
        ss.setSpan(spanBC, iCounter, iCounter+1, Spannable.SPAN_COMPOSING);
        tv.setText(ss);
    }


    @Override
    public void onClick(View v) {
        if(v==bu){//クリックした場合
            iCounter++;//次の文字に移行する。
            if(iCounter>=iMaxChar) iCounter = 0;
            
            //前回の装飾は無くなり、次の文字が装飾される。
            ss.setSpan(spanBC, iCounter, iCounter+1, Spannable.SPAN_COMPOSING);
            tv.setText(ss);
            return;
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/Button"
        android:text="@string/Button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
    </Button>
    <TextView
        android:id="@+id/TextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        > 
    </TextView>
</LinearLayout>

0 件のコメント:

コメントを投稿