如何制作垂直TextView

时间:2016-05-14 18:05:44

标签: android android-layout

我正在Android中创建一个应用程序,我目前正在尝试制作一个垂直TextView。我希望它看起来与此类似。

enter image description here

有谁知道如何实现这一点,或者至少是一个现有的库,我可以使用它来获得这种效果。

由于

2 个答案:

答案 0 :(得分:2)

  

如果您想要这样的垂直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 :(得分: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);
}
}