我想使文本视图与窗口屏幕的左右边缘对齐。预期的结果会是这样
但实际结果是这样的
这是我的XML…

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

    <FrameLayout
        android:id="@+id/cameraPreview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@color/grey_700"
        android:text="TEST TEXT TEST TEXT"
        android:textColor="@color/white"
        android:textSize="35sp" />

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@color/grey_700"
        android:text="TEST TEXT TEST TEXT"
        android:textColor="@color/white"
        android:textSize="35sp"
        />


    <TextView
        android:id="@+id/text3"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/grey_700"
        android:rotation="270"
        android:text="TEST TEXT TEST TEXT"
        android:textColor="@color/white"
        android:textSize="35sp"
        android:layout_alignBottom="@+id/text4"
        android:layout_alignParentStart="true"
        />

    <TextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/grey_700"
        android:rotation="90"
        android:text="TEST TEXT TEST TEXT"
        android:textColor="@color/white"
        android:textSize="35sp"
        android:layout_centerVertical="true"
        android:layout_alignParentEnd="true"
        />
</RelativeLayout>

似乎当我旋转textview时,只有我旋转的textview会向左和向右移动。
你有什么想法,如何使两个文本视图左对齐和右对齐,作为预期的结果?
谢谢您!

最佳答案

我在this answer中找到了一个自定义的垂直文本视图,您可以使用并保留背景:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/cameraContainer"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/cameraPreview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:background="@color/grey_700"
        android:text="TEST TEXT TEST TEXT"
        android:textColor="@color/white"
        android:textSize="35sp"/>
    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_gravity="bottom"
        android:background="@color/grey_700"
        android:text="TEST TEXT TEST TEXT"
        android:textColor="@color/white"
        android:textSize="35sp"/>
    <com.app.views.VerticalTextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|left"
        android:gravity="bottom|center_horizontal"
        android:text="TEST TEXT TEST TEXT"
        android:background="@color/grey_700"
        android:textColor="@color/white"
        android:textSize="35sp"/>
    <com.app.views.VerticalTextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|right"
        android:gravity="top|center_horizontal"
        android:text="TEST TEXT TEST TEXT"
        android:background="@color/grey_700"
        android:textColor="@color/white"
        android:textSize="35sp"/>
</FrameLayout>

/*VerticalTextView.java*/
package com.app.views;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.TextView;

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 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(), android.graphics.Region.Op.REPLACE);
        super.draw(canvas);
    }
}

10-08 06:54
查看更多