如何在android中显示2种颜色的文本?

时间:2016-12-02 07:35:36

标签: android layout textview

我有一个文本,其中有一些其他视图与它重叠(在RelativeLayout中)。我希望文本的一部分位于不同颜色的重叠视图内,并且在不同颜色的视图之外。请查看示例图像。我尝试使用TextView重叠视图并设置其textColor属性,但这不起作用。任何帮助,将不胜感激。 Image with text overlapping with a view

编辑:如图所示,我想要一些' a'应该是不同的颜色,其余的椭圆形是不同的颜色。

编辑:请考虑以下示例代码,说明我的目的。在这里写的是' m'在另一部分内部有一部分(红部分)。目前所有文字都是白色的。我需要的是边界之后的部分(从红色视图开始的地方)所有文本都是黑色。屏幕截图也附在下面。希望现在我很清楚。

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="20dp"
            android:background="#0000ff">

            <View
                android:layout_width="257dp"
                android:layout_height="match_parent"
                android:background="#ff0000"
                android:layout_alignParentRight="true"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="Hi I am some text"
                android:textColor="#ffffff"/>

        </RelativeLayout>

Android app screen shot

3 个答案:

答案 0 :(得分:3)

我找到了实现这一目标的方法。虽然我找不到用两种颜色在TextView中显示文本的方法。但是,如果我们创建一个自定义视图类并在画布上绘制形状和文本并使用颜色混合(PorterDuffXferMode),则可能产生类似的效果。

以下是我使用的自定义视图的onDraw方法的示例代码:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    int color1 = Color.rgb(137, 195, 246);  // outside background's color
    int color2 = Color.rgb(246, 187, 137);  // inside background's color
    int color3 = Color.WHITE;   // outside text's color
    int color4 = Color.BLACK;   // inside text's color

    canvas.drawColor(color1);   // fill outside background

    // make inside oval shape and fill it
    Paint paint = new Paint();
    paint.setColor(color2);
    canvas.drawArc(getWidth()*0.36f, 20, getWidth()*3/4, getHeight()-20, 0, 360, false, paint);

    /* create a bitnmap for a new canvas */
    Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), ARGB_8888);
    Canvas bitmapCanvas = new Canvas(bitmap);   // new canvas

    /* draw text on bitmapCanvas */
    paint.setColor(color3);
    paint.setTextSize(80);
    bitmapCanvas.drawText("Hi I am some text", 50, 140, paint);

    /* use "source in" PorterDuff mode and draw inside oval on bitmapCanvas
    *  using color4 so that only the text inside oval will remain in color4 and
    *  rest will be transparent*/
    Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
    paint.setXfermode(xfermode);
    paint.setColor(color4);
    bitmapCanvas.drawArc(getWidth()*0.36f, 20, getWidth()*3/4, getHeight()-20, 0, 360, false, paint);

    /* draw this bitmap to original canvas */
    paint.setXfermode(null);
    canvas.drawBitmap(bitmap,0,0,paint);
}

视图看起来像这样:

enter image description here

答案 1 :(得分:1)

尝试创建Spannable并将Spannable设置为textview,尝试这样

 TextView textview = (TextView)findViewById(R.id.textview);

    Spannable colorSpan = new SpannableString("HI I am some text");        

    colorSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    textview.setText(colorSpan);

答案 2 :(得分:0)

只需在string.xml中添加你的句子:

<resources>
  <string name="some_text"><font fgcolor="#FFFFFF">Hi i am</font><font fgcolor="#ffff0000">some red text</font></string> 
</resources>

你可以像这样设置:

String styledText = getResources().getString(R.string.some_text);
sometext.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);