2

クラスをTextView使用する際にテキストを強調表示する方法については、すでにいくつかの解決策を検討しました。Spannableただし、文字で構成されるスニペットのみを強調表示できます。また、の幅を含むテキスト行を強調表示したいのにTextView、この行のテキストがビュー全体の幅を満たしていない場合はどうなりますか?

そのような場合に経験があれば、アドバイスをいただければ幸いです。

アップデート:

わかりました。次の画像が私の目的を明確にすることを願っています。

これは私が使用して達成できる方法Spannableです:

ここに画像の説明を入力してください

そしてこれが私が欲しいものです:

ここに画像の説明を入力してください

私はそれが明確であることを本当に望んでいます。

4

4 に答える 4

8

これを行うにはもっと簡単な方法があるかもしれませんが、必要なことを行うには LineBackgroundSpan を実装するクラスを実装する必要があると思います。サンプルコードは次のとおりです。

public class MyActivity extends Activity {

    private static class MySpan implements LineBackgroundSpan {
        private final int color;

        public MySpan(int color) {
            this.color = color;
        }

        @Override
        public void drawBackground(Canvas c, Paint p, int left, int right, int top, int baseline,
                int bottom, CharSequence text, int start, int end, int lnum) {
            final int paintColor = p.getColor();
            p.setColor(color);
            c.drawRect(new Rect(left, top, right, bottom), p);
            p.setColor(paintColor);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final TextView tv = new TextView(this);
        setContentView(tv);

        tv.setText("Lines:\n", BufferType.EDITABLE);
        appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.BLACK);
        appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.RED);
        appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.BLACK);
    }

    private void appendLine(Editable text, String string, int color) {
        final int start = text.length();
        text.append(string);
        final int end = text.length();
        text.setSpan(new MySpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
}
于 2012-05-20T19:13:58.340 に答える
0

あなたはandroid:padding="5dp"あなたのxmlレイアウトファイルで行うことができ、スタイルxmlとスパン可能な文字列を介して正常に強調表示することができます

TextView TV = (TextView)findViewById(R.id.text);
TV.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);

Spannable WordtoSpan = (Spannable) TV.getText();

WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

TV.setText(WordtoSpan);

リンク1

これはあなたを助けるかもしれません

于 2012-05-18T05:42:32.210 に答える
0

以下のコードを drawable フォルダーに保存します

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="<<your color code"/>
</shape>

以下のようにテキストビューの背景を指定します

android:background="@drawable/<<your file name>>"
于 2012-05-18T06:16:11.593 に答える
0

あなたがやろうとしていることは、 を使用するとより簡単に実行できますStateListDrawable

すべてTextViewの をタッチ モードでフォーカス可能にします。textview の背景色とテキスト色の statelistdrawables を定義し、textviewrequestFocus()を強調表示したいときはいつでも呼び出します。

テキストビューの背景の StateListDrawable :

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
     android:state_focused="true"
     android:drawable="#0F0" />

    <item android:drawable="#0000" />

</selector>

同様に、テキストの色のセレクター リストを定義します。

于 2012-05-20T18:08:03.263 に答える