1

agradient to textview を参照すると、通常のアクションは android で実現できます。

以下のように :

 android:background="@drawable/gredient"

グラデーション XML は次のコードのようになります。

<?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
  <gradient android:startColor="#B22222" android:centerColor="#000000"
          android:endColor="#B22222" android:angle="0" /> 
    <corners android:radius="15dp"  /> 
 </shape>

私が求めているのは、アンドロイドには5つの段落で構成される単一のテキストビューに複数のグラデーションを適用する方法がないため、各段落には異なるグラデーションがあります。

アドバイスをいただければ幸いです。

ありがとう

4

3 に答える 3

1

(より高度なフォーマットが必要な場合)のWebView代わりに使用することを検討することもできますが、TextViewに固執したい場合は、友達です:)TextViewLineBackgroundSpan

より良い解決策があるかもしれませんが(おそらくカスタム派生クラスを含む)、特別なインターフェイスLayoutを実装するだけで必要なことを実行するサンプルコードを次に示します。LineBackgroundSpan

public class MyActivity extends Activity {

    private Editable mEditable;

    private class MySpan implements LineBackgroundSpan {
        private final Rect rect = new Rect();
        private final Drawable drawable;
        private int next = 0;

        public MySpan(Drawable drawable) {
            this.drawable = drawable;
        }

        @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) {
            if (start == end) return;
            if (next == 0) {
                next = mEditable.nextSpanTransition(start, Integer.MAX_VALUE, MySpan.class);
                rect.left = left;
                rect.top = top;
            }
            if (next == end) {
                rect.right = right;
                rect.bottom = bottom;
                c.save();
                drawable.setBounds(rect);
                drawable.draw(c);
                c.restore();
            }
        }
    }

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

        final Resources res = getResources();
        final Drawable gd1 = res.getDrawable(R.drawable.gd1);
        final Drawable gd2 = res.getDrawable(R.drawable.gd2);
        final Drawable gd3 = res.getDrawable(R.drawable.gd3);
        final Drawable gd4 = res.getDrawable(R.drawable.gd4);

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

        tv.setText("Paragraphs with drawable background:\n", BufferType.EDITABLE);
        mEditable = tv.getEditableText();

        final String text = "paragraph text ";
        appendPara("###\n".replaceAll("#", text), gd1);
        appendPara("##############\n".replaceAll("#", text), gd2);
        appendPara("#######\n".replaceAll("#", text), gd3);
        appendPara("###########\n".replaceAll("#", text), gd4);
    }

    private void appendPara(String string, Drawable gd) {
        final int start = mEditable.length();
        mEditable.append(string);
        final int end = mEditable.length();
        mEditable.setSpan(new MySpan(gd), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

}
于 2012-07-08T17:37:51.263 に答える
0

したがって、複数のグラデーションに複数のグラデーションが必要な場合は、それぞれに1つのグラデーションを設定して、それぞれに固有のグラデーションを設定Paragraphsしないのはなぜですか。TextViewParagraphTextView

段落数がわからない場合は、

を作成し、すべての段落LinearLayoutに対して実行時にwithを作成し、それを親 ( ) ビューに追加する必要があります。とあなたに設定されたコードで。heightwrap-contentTextViewfill_parent widthwrap_context heightTextViewLinearLayoutbackgroundsTextViews

于 2012-07-08T07:27:47.917 に答える
0

AndroidのデフォルトのTextViewでは不可能だと思います。

クラスを で拡張して独自のビューを作成し、ビューのメソッドでや などのViewメソッドを使用して、異なるグラデーションで各段落を作成できます。Canvas.drawText(...)Canvas.drawBitmap(...)onDraw()

これは、行の高さと段落の間隔を制御するのにも役立ちます。

于 2012-06-26T17:22:15.780 に答える