旋转后垂直TextView定位

时间:2018-03-22 07:50:03

标签: android android-layout

虽然我正在处理垂直TextView,但我有两种解决方案之一:

  1. 普通TextView旋转-90:这使得控制 由于这个原因,这个位置太难了,结果出乎意料 不同大小的设备
  2. 自定义垂直TextView,但我不知道这样做。
  3. 有任何建议或解决方案吗?

    以下代码将导致文本视图具有中心位置,如果我需要使垂直视图位于屏幕的右端并垂直集中,该怎么办?

    <TextView
            android:id="@+id/descriptionTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|end"
            android:rotation="-90"
            android:gravity="center"
            android:textColor="@android:color/white"
            android:textSize="15sp"
            tools:text="Please Center your image" />
    

3 个答案:

答案 0 :(得分:1)

以下是帮助您的自定义类

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

/**
 * Created by DB Solanki on 22/3/18.
 */

public class VTextView extends TextView {
    final boolean isTop;
    public VTextView(Context context, AttributeSet attrs){
        super(context, attrs);
        final int mGravity = getGravity();
        if(Gravity.isVertical(mGravity) && (mGravity&Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) {
            setGravity((mGravity&Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP);
            isTop = false;
        }else
            isTop = true;
    }
    @Override
    protected void onMeasure(int mWidthMeasureSpec, int mHeightMeasureSpec){
        super.onMeasure(mHeightMeasureSpec, mWidthMeasureSpec);
        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 mCanvas){
        if(isTop){
            mCanvas.translate(getHeight(), 0);
            mCanvas.rotate(90); //Here rotate view to 90degree
        }else {
            mCanvas.translate(0, getWidth());
            mCanvas.rotate(-90);
        }
        mCanvas.clipRect(0, 0, getWidth(), getHeight(), android.graphics.Region.Op.REPLACE);
        super.draw(mCanvas);
    }
}

答案 1 :(得分:0)

我确实喜欢这个

尝试这样: -

             <TextView
                android:layout_width="10dp"
                android:layout_height="200dp"
                android:text="Abhinav Gupta"/>

根据height获取text并根据width

获取textSize

答案 2 :(得分:0)

您可以为文字添加枢轴位置。

android:transformPivotX="200dp"