3

我想在 android 中突出显示 textview 与此图像相同 在此处输入图像描述

我该怎么做?谢谢

就像这个链接 http://youtube.com/watch?v=0qE3egNettY

4

3 回答 3

4

这就是你想要的:

package org.pskink.shape;

import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Picture;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PictureDrawable;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextPaint;
import android.text.style.DynamicDrawableSpan;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.widget.TextView;

public class DrawableSpanTest extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drawable_span_test);
        TextView tv = (TextView) findViewById(R.id.text);
        Spannable text = new SpannableStringBuilder("This is liric of the song");
        setSpans(tv, text);
        tv.setText(text);
    }

    private void setSpans(TextView tv, Spannable text) {
        int blueColor = 0xff0000ff;
        int redColor = 0xffff0000;
        ForegroundColorSpan blue = new ForegroundColorSpan(blueColor);
        ForegroundColorSpan red = new ForegroundColorSpan(redColor);
        HalfColorSpan o = new HalfColorSpan("o", tv, blueColor, redColor);
        text.setSpan(blue, 0, 14, 0);
        text.setSpan(o, 14, 15, 0);
        text.setSpan(red, 15, text.length(), 0);
    }

    class HalfColorSpan extends DynamicDrawableSpan {
        private final static String TAG = "DrawableSpanTest.HalfColorSpan";
        Picture mPicture;
        public HalfColorSpan(String text, TextView tv, int c0, int c1) {
            super(ALIGN_BASELINE);
            mPicture = new Picture();
            TextPaint p = tv.getPaint();
            Rect bounds = new Rect();
            p.getTextBounds(text, 0, text.length(), bounds);
            float width = p.measureText(text);
            float height = bounds.height();
            float y = height;
            Canvas c = mPicture.beginRecording((int) width, (int) height);
            c.save(Canvas.CLIP_SAVE_FLAG);
//          c.drawColor(0x22000000);
            p = new TextPaint(p);
            p.setColor(c0);
            c.clipRect(0, 0, width / 2, height, Region.Op.REPLACE);
            c.drawText(text, 0, y, p);
            p.setColor(c1);
            c.clipRect(width / 2, 0, width, height, Region.Op.REPLACE);
            c.drawText(text, 0, y, p);
            c.restore();
            mPicture.endRecording();
        }
        @Override
        public Drawable getDrawable() {
            PictureDrawable d = new PictureDrawable(mPicture);
            d.setBounds(0, 0, mPicture.getWidth(), mPicture.getHeight());
            return d;
        }
    }
}

和布局/drawable_span_test.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/text"
    android:textSize="50dip"
    android:gravity="center"
    android:background="#eee"
/>

结果是: 在此处输入图像描述

于 2013-04-15T12:48:56.483 回答
1

试试这个,不完全是你想要的,但应该做的工作:

String text = "<font color=#cc0030>This is layrics o</font> <font color=#ffff00>f the song</font>";
textview.setText(Html.fromHtml(text));
于 2013-04-15T12:45:30.507 回答
0

你也可以使用android Spannable

例如这个

于 2013-04-15T12:59:18.520 回答