Вертикальная реализация textview в androidX - PullRequest
0 голосов
/ 14 марта 2020

Так что, в основном, я попробовал каждый метод, приведенный здесь, чтобы сделать вертикальный просмотр текста. Во-первых, это метод 'translation: "- 90" (атрибут XML TextView), который делает текстовое представление вертикальным, но оно по-прежнему занимает ту же ширину, что и в обычном режиме. Я также попробовал эту реализацию, учитывая здесь .

Но все эти методы не работают должным образом в проекте androidX. Модифицированная реализация Textview также действует по умолчанию при вращении и принимает ту же ширину, что и в горизонтальном / режиме по умолчанию.

1 Ответ

0 голосов
/ 19 марта 2020

Я достиг того, чего я пытался достичь. В androidX эта реализация должна быть немного изменена. Сделайте расширение класса AppCompatTextView вместо TextView.

import androidx.appcompat.widget.AppCompatTextView;


public class VerticalTextView  extends AppCompatTextView{
final boolean topDown;
public VerticalTextView(Context context, AttributeSet attrs){
    super(context, attrs);
    final int gravity = getGravity();
    if(Gravity.isVertical(gravity) && (gravity&Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {
        setGravity((gravity&Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP);
        topDown = false;
    }else
        topDown = true;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(heightMeasureSpec, widthMeasureSpec);
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}

@Override
protected void onDraw(Canvas canvas){
    TextPaint textPaint = getPaint();
    textPaint.setColor(getCurrentTextColor());
    textPaint.drawableState = getDrawableState();

    canvas.save();

    if(topDown){
        canvas.translate(getWidth(), 0);
        canvas.rotate(90);
    }else {
        canvas.translate(0, getHeight());
        canvas.rotate(-90);
    }


    canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());

    getLayout().draw(canvas);
    canvas.restore();
}

}

Кроме того, это Реализация делает то же самое, но цвет Textviews не может быть изменен динамически с этим.

...