Подкласс TextView и цвет текста - PullRequest
1 голос
/ 26 марта 2011

Я пытаюсь реализовать подкласс TextView, который печатает текст вертикально повернутым, но у меня возникают проблемы при печати текста в цвет, который я определяю из макета XML.Код класса:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.TextView;

public class VerticalTextView extends TextView {
    private Rect bounds = new Rect();
    private TextPaint textPaint;

    public VerticalTextView(Context context) {
        super(context);
    }

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

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        textPaint = getPaint();
        textPaint.getTextBounds((String) getText(), 0, getText().length(), bounds);
        setMeasuredDimension((int) (bounds.height() + textPaint.descent()), bounds.width());
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.rotate(-90, bounds.width(), 0);
        canvas.drawText((String) getText(), 0, -bounds.width() + bounds.height(), textPaint);
    }
}

Мне не нужны настраиваемые свойства для этого представления, поэтому я не объявляю стиль для него.

Я использую это представление в моемдействие этого макета:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.verticaltextview.VerticalTextView
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="Hello World" android:textColor="#ff0000ff"
        android:textStyle="italic" />
</LinearLayout>

Как видите, я указываю цвет текста (синий) и стиль текста (курсив), но применяется только стиль, так как текст печатаетсяВ черном.Если в методе onDraw() я жестко закодировал цвет, выполнив textPaint.setColor(0xff00ff00), то текст будет правильно напечатан в цвете.

Предложения?Спасибо;)

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

Вам придется изменить конструкторы вашего VerticalTextView на следующие:

private int         col     = 0xFFFFFFFF;

public VerticalTextView(Context context, AttributeSet attrs)
{
    super(context, attrs); // was missing a parent
    col = getCurrentTextColor();
}

Затем добавьте

textPaint.setColor(col);  

к вашей onDraw() функции.

Надеюсь, это поможет.

0 голосов
/ 26 марта 2011

Я думаю, вы можете получить цвет:

**public VerticalTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
}**

, затем установите этот цвет на textPaint.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...