如何制作一个竖向的TextView

3

我正在制作一个Android应用程序,并且目前正在尝试制作垂直TextView。我希望它看起来类似于这个。

enter image description here

有人知道如何实现这个效果,或者至少有现有的库可以用来获得这个效果吗?

谢谢


3
在每个字符后添加\n,这样能解决你的问题吗? - Shayan Pourvatan
这个Text View有没有特定的用途可以垂直显示文本? - Jay Rathod
@jaydroider 是的,它需要是垂直的。 - Oya
@Oya 请查看我下面的答案。 - Jay Rathod
@shayanpourvatan,那真是个天才的想法。 - Oya
请查看此方法以满足您的需求https://dev59.com/DnM_5IYBdhLWcg3wt1rD#7855852。 - Krishna
2个回答

3
如果您想要像这样的垂直Text View,则需要将\n传递给Text View文本属性。

请参考此处。

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


    <TextView
        android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="5dp"
        android:background="#000"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="5dp"
        android:text="A\nB\nC\nD\n"
        android:textColor="#FFF"
        android:textSize="18dp" />

</RelativeLayout>

1
你必须创建自定义视图。
例如:
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 boolean setFrame(int l, int t, int r, int b) {
    return super.setFrame(l, t, l + (b - t), t + (r - l));
}

@Override
public void draw(Canvas canvas) {
    if (topDown) {
        canvas.translate(getHeight(), 0);
        canvas.rotate(90);
    } else {
        canvas.translate(0, getWidth());
        canvas.rotate(-90);
    }
    canvas.clipRect(0, 0, getWidth(), getHeight(), Region.Op.REPLACE);

    super.draw(canvas);
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接