29

EditText と Spannable テキスト オブジェクトの使用に苦労しています。最近、API ドキュメントを 10 回ほど読みましたが、正しく理解しているかどうかはわかりません。だから私は EditText と Spannable を利用する方法を示す一種の例を探しています。

4

2 に答える 2

32

APIから把握できないものを指定しないため、質問に答えるのは困難です(簡単な答え:一般的な質問ではなく、特定の質問に書き直してください)。

典型的なSpannableの例は、EditTextで選択したテキストをイタリックに変換する次のようなものです。

Spannable str = mBodyText.getText(); 
if(mBodyText.getSelectionEnd() > mBodyText.getSelectionStart()) 
  str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),  
                      mBodyText.getSelectionStart(), mBodyText.getSelectionEnd(),  
                      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
else
  str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),
              mBodyText.getSelectionEnd(),
              mBodyText.getSelectionStart(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

これは他のものから切り取って貼り付けるため、直接貼り付けが損なわれている可能性がありますが、少なくともa Spannable(この場合はStyleSpan)の実用的な例を示しています。APIでは、他のタイプのスパンを見つけることができます(特にImageSpan、新しく変換されたドロイダーの間でよくある質問です)。

于 2010-02-01T18:24:38.637 に答える
10

私もそれを理解しようとし始めたばかりで、それは不必要にトリッキーなようです。

これは、既存のビューに新しいスパン可能なテキストを追加するための実用的な方法です。ビューに色付きのテキストを追加したかったのですが、これが唯一の方法のようでした。

醜いハックのように感じますが、ダミーのTextView(どこにも表示されていません)を作成し、そこでテキストのスタイルを設定してから、そのスタイルのテキストを好きな場所に追加できます。その功績はanddev.orgのiifuzzにあります。私のコードは次のようになります。

    spanbuffer = new TextView(context);
    spanbuffer.setText(newText, TextView.BufferType.SPANNABLE);
    Spannable s = (Spannable) spanbuffer.getText();
    s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0);
    this.append(s);

SpannableFactoryを使用して、次のように新しいスパン可能なテキストを作成できるはずです。

    Spannable s = Spannable.Factory.getInstance().newSpannable(newText);

しかし、このテキストで実際に新しいスパン効果を表示することができなかったので、あきらめました。

于 2010-10-02T17:14:11.977 に答える