Android中的垂直TextView

我正在尝试创build如下的内容。

在这里输入图像说明

通过使用LinearLayout和TableLayout。 但是我垂直文本。 在轮换之后,它占用的空间比它应该多。

这是XML

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/tv_CONSEQUENCES" android:layout_width="wrap_content" android:layout_height="wrap_content" android:rotation="-90" android:text="CONSEQUENCES" android:textAppearance="?android:attr/textAppearanceLarge" /> <TableLayout android:layout_width="wrap_content" android:layout_height="match_parent" > <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </TableRow> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </TableRow> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </TableRow> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </TableRow> </TableLayout> </LinearLayout> 

和这样的输出。

在这里输入图像说明

垂直文本占用比应该需要的更多的空间。 也没有全文出现。 🙁

Solutions Collecting From Web of "Android中的垂直TextView"

你应该从下面提到的链接得到你的问题的答案:

在textview中的垂直文本

你可以使用下面的代码:

 android:rotation="270" 

没有解决scheme为我工作,但我发现这个由马克·阿里森博客文章: https : //blog.stylingandroid.com/verticaltext-part-1/

 public class VerticalTextView extends TextView { 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(); } } 

旋转是由重力完成的。 所以一定要在你的xml中设置这个:

 <com.stylingandroid.verticaltext.VerticalTextView style="@style/verticalTextStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="bottom|right" android:text="@string/text" /> 

你必须扩展TextView并覆盖它的onDraw

为什么不把填充?所以它会在屏幕的中心,只要你喜欢试试看

将所有文本视图放在线性布局中,并尝试给出适当的布局权重来解决您的问题

  android:rotation="-90" android:layout_gravity="center" 

为我工作。

如果你想重现你的图像,我会使用没有button的GridView或TableLayout,只要设置正确的侦听器,如果你需要做任何动作。 这样你可以设置固定的高度和宽度。