1

我想要一些东西,其中 textView 或任何其他类型的文本显示中的一半文本被突出显示,而另一半则没有。例如

在“文本视图”中。“文本”为红色字体,“视图”为黑色。

我正在考虑通过将 2 个 textView 直接放在彼此之上来做到这一点,但我不确定如何做到这一点。(什么样的参数等?)有什么想法吗?

谢谢

4

1 回答 1

0

您可以使用支持此功能的Layout来堆叠多个 textView ,例如 aFrameLayoutRelativeLayout。也就是说,我认为更好的方法(可以更好地控制外观)是创建一个自定义视图,然后自己将文本绘制到画布上。你可以用这样的东西来做到这一点(我没有测试过这个,但它应该可以工作 - 虽然可能需要一些调整):

public class TwoPartTextView extends View
{

    private CharSequence part1 = "", part2 = "";
    private Paint mPaint;
    private int color1 = Color.BLACK, color2 = Color.BLACK;
    private Context context;
    private float part1Size = 12f, part2Size = 12f;
    private int strokeWidth = 2;

    public TwoPartTextView(Context context) {
        super(context);
        init(context);
    }

    public TwoPartTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public TwoPartTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    private void init(context) {
        this.context = context;
        mPaint = new Paint();
    }

    public void setText(CharSequence part1, int color1, part1Size, CharSequence part2, int color2, part2Size, strokeWidth) {
        this.part1 = part1;
        this.color1 = color1;
        this.part1Size = part1Size;
        this.part2 = part2;
        this.color2 = color2;
        this.part2Size = part2Size;
        this.strokeWidth = strokeWidth;
        mPaint.setStrokeWidth(strokeWidth);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint.setColor(color1);
        mPaint.setTextSize(part1Size);
        canvas.drawText(part1.toString(), 0, paint.getTextSize(), paint);
        mPaint.setColor(color2);
        mPaint.setTextSize(part2Size);
        canvas.drawText(part2.toString(), getWidth()/2 /* tweak as needed*/, paint.getTextSize(), paint);
    }

}

然后使用它,将它添加到 XML 或在代码中创建它,然后调用:

myTwoPartTextView.setText("text", Color.RED, 12f, "View", Color.BLACK, 14f, 2);
myTwoPartTextView.setText.invalidate();
于 2013-04-29T19:25:18.607 回答