Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
androidX中的垂直文本视图实现_Android_Xml_Android Layout - Fatal编程技术网

androidX中的垂直文本视图实现

androidX中的垂直文本视图实现,android,xml,android-layout,Android,Xml,Android Layout,所以基本上我已经尝试了这里给出的每一种方法来创建一个垂直的文本视图。首先是“rotation:”-90“(XML TextView属性)方法,该方法使TextView垂直,但其宽度仍与在正常模式下相同。我也尝试过这个实现 但所有这些方法在androidX项目中都没有达到预期的效果。修改后的Textview实现在旋转时也作为默认实现,其宽度与在水平/默认模式下的宽度相同。我实现了,我试图实现的。 在androidX中,需要对实现进行一些修改。使类扩展AppCompatTextView而不是Text

所以基本上我已经尝试了这里给出的每一种方法来创建一个垂直的文本视图。首先是“rotation:”-90“(XML TextView属性)方法,该方法使TextView垂直,但其宽度仍与在正常模式下相同。我也尝试过这个实现


但所有这些方法在androidX项目中都没有达到预期的效果。修改后的Textview实现在旋转时也作为默认实现,其宽度与在水平/默认模式下的宽度相同。

我实现了,我试图实现的。 在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();
}
}

同样,这也是一样的,但是文本视图的颜色不能用这个动态地改变