3

I want to highlight textview in android same this image enter image description here

How i do that? Thanks

Like as this link http://youtube.com/watch?v=0qE3egNettY

Du Huynh
  • 151
  • 1
  • 13
  • Try refering this question ,this should answer you question http://stackoverflow.com/questions/2120035/highlight-text-in-textview-or-webview – Abx Apr 15 '13 at 12:51

3 Answers3

4

this is what you want:

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;
        }
    }
}

and layout/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"
/>

the result is: enter image description here

pskink
  • 23,874
  • 6
  • 66
  • 77
1

Try this, Not exactly what you want but should do the job:

String text = "<font color=#cc0030>This is layrics o</font> <font color=#ffff00>f the song</font>";
textview.setText(Html.fromHtml(text));
M-Wajeeh
  • 17,204
  • 10
  • 66
  • 103
0

Also you can use android Spannable

For example this

Community
  • 1
  • 1
Sardor Dushamov
  • 1,665
  • 3
  • 17
  • 44