2013-04-29 3 views
1

Я хочу иметь что-то, где половина текста в textView или любой другой текстовый дисплей подсвечивается, а другая половина - нет. Например,положить 2 textViews друг на друга

в "textView". «текст» будет красным шрифтом, а «вид» будет черным.

Я думал об этом, поставив 2 textViews непосредственно друг на друга, но я не совсем уверен, как это сделать. (Какие параметры и т. Д.) Любые идеи?

Спасибо

+0

Вы можете использовать framelayout или RelativeLayout складывать мнения. – kabuto178

+0

Знаете ли вы, какие параметры я бы установил в каждом из них? – James

+1

TextView способен отображать некоторые HTML-форматирования, не так ли проще? – SimonSays

ответ

0

Вы можете сложить несколько TextViews с помощью Layout, который поддерживает это, например, FrameLayout или RelativeLayout. Тем не менее, я думаю, что лучший подход (который обеспечил бы лучший контроль над внешним видом) - это создание пользовательского представления и рисование текста на холсте самостоятельно. Вы можете сделать это с чем-то вроде этого (я не проверял, но он должен работать - возможно, потребуется несколько щипков, хотя):

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(); 
Смежные вопросы