CharacterStyleなどのクラスを使って文字列の一部を
下線を引いたり、下付き文字にしたり、
上付き文字にしたり、URLを付けたり...
と様々なことができます
CharacterStyle のサブクラスには
- UnderlineSpan
- SubscriptSpan
- SuperscriptSpan
- URLSpan
- ScaleXSpan
- RelativeSizeSpan etc...
というわけで, Spannable でテキストをいじってみた
サンプルプログラム
- import android.app.Activity;
- import android.os.Bundle;
- import android.text.Spannable;
- import android.text.Spannable.Factory;
- import android.text.style.RelativeSizeSpan;
- import android.text.style.ScaleXSpan;
- import android.text.style.SubscriptSpan;
- import android.text.style.SuperscriptSpan;
- import android.text.style.URLSpan;
- import android.text.style.UnderlineSpan;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.TextView;
- public class SpannableTest extends Activity {
- Spannable spannable;
- UnderlineSpan underline;
- SubscriptSpan subscript;
- SuperscriptSpan superscript;
- URLSpan url;
- ScaleXSpan scaleX;
- RelativeSizeSpan relative;
- TextView textView[];
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.spannabletest);
- textView = new TextView[4];
- for (int i = 0; i < 4; i++) {
- textView[i] = (TextView) findViewById(R.id.TextView01 + i);
- }
- // UnderlineSpan
- underline = new UnderlineSpan();
- // SubscriptSpan
- subscript = new SubscriptSpan();
- // SuperscriptSpan
- superscript = new SuperscriptSpan();
- // URLSpan
- url = new URLSpan("http://weide-dev.blogspot.com/");
- // ScaleXSpan
- scaleX = new ScaleXSpan(0.5f);
- // RelativeSizeSpan
- relative = new RelativeSizeSpan(0.5f);
- // Factory の取得
- Factory factory = Spannable.Factory.getInstance();
- /* アンダーラインが引かれた文字列 */
- // Spannable の取得
- spannable = factory.newSpannable(textView[0].getText());
- // 0からテキストの長さ分まで下線を引く
- spannable.setSpan(
- underline,
- 0,
- textView[0].getText().length(),
- spannable.getSpanFlags(underline)
- );
- // TextView にテキストを設定
- textView[0].setText(spannable, TextView.BufferType.SPANNABLE);
- /* 後ろ4文字が下付きの文字列 */
- spannable = factory.newSpannable(textView[1].getText());
- // 後ろ4文字を下付き文字にする
- spannable.setSpan(
- subscript,
- textView[1].getText().length() - 4,
- textView[1].getText().length(),
- spannable.getSpanFlags(subscript)
- );
- // 後ろ4文字のXのスケールを0.5倍する
- spannable.setSpan(
- scaleX,
- textView[1].getText().length() - 4,
- textView[1].getText().length(),
- spannable.getSpanFlags(scaleX)
- );
- textView[1].setText(spannable, TextView.BufferType.SPANNABLE);
- /* 後ろ4文字が上付きの文字列 */
- spannable = factory.newSpannable(textView[2].getText());
- // 後ろ4文字を上付き文字にする
- spannable.setSpan(
- superscript,
- textView[2].getText().length() - 4,
- textView[2].getText().length(),
- spannable.getSpanFlags(superscript)
- );
- // 後ろ4文字のサイズを0.5倍する
- spannable.setSpan(
- relative,
- textView[2].getText().length() - 4,
- textView[2].getText().length(),
- spannable.getSpanFlags(relative)
- );
- textView[2].setText(spannable, TextView.BufferType.SPANNABLE);
- /* URL文字列 */
- spannable = factory.newSpannable(textView[3].getText());
- // 0からテキストの長さ分までURLタイプにする
- spannable.setSpan(
- url,
- 0,
- textView[3].getText().length(),
- spannable.getSpanFlags(url)
- );
- textView[3].setText(spannable, TextView.BufferType.SPANNABLE);
- textView[3].setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // URLを開く
- url.onClick(textView[3]);
- }
- });
- }
- }
こんな感じ!
参考サイト
http://developer.android.com/intl/ja/reference/android/text/Spannable.html
http://developer.android.com/intl/ja/reference/android/text/style/CharacterStyle.html
Muito bom
返信削除;)