TextView에 Rotation주기 (글자를 세로로 표시)

조회수 4027회

텍스트를 세로로 표시해주기위해서 rotation에 -90.0을 주었는데 여기서 문제가 생겨 질문드려요 ㅠㅠ

이미지 이름이나 설명을 여기에 넣어주세요.

지금 이 상태에서 -90.0으로 주었는데

이미지 이름이나 설명을 여기에 넣어주세요.

저렇게 돌아가서 보이는 것을 구현하려는 것은 맞지만, 저 택스트 뷰를 감싸고 있는 LinearLayout의 크기가 바뀌지 않네요 ㅠ

1번 사진에서 LinearLayout의 width를 wrap_content로 두었더니, rotation되기 전의 크기로 고정이 되어서 회전을 한 후에도 그 크기로 남아서 사진2처럼 텍스트뷰 양옆으로 공간이 생겨있습니다. 저것을 원하지는 않았는데 말이죠 ㅠ 그래서 LinearLayout의 width를 텍스트 사이즈와 같게 해봤더니, 로테이션 되기전에 텍스트뷰안의 텍스트가 두줄로 써진 상태로 로테이션 되어 회전후에도 두줄로 남아버렸습니다.

사진2번에서 텍스트뷰의 양옆 공백을 없에려면 어떻게 해야하나요?

1 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    TextView를 상속받아서 뷰를 돌리면 될 것 같네요.

    package com.example.myapplication;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.text.TextPaint;
    import android.util.AttributeSet;
    import android.widget.TextView;
    
    public class CustomTextView extends TextView {
    
        public CustomTextView(Context context, AttributeSet attrs){
            super(context, attrs);
        }
    
        @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();
    
            canvas.translate(getWidth(), 0);
            canvas.rotate(90); //원하는 방향 설정
    
            canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
    
            getLayout().draw(canvas);
            canvas.restore();
        }
    }
    

    그리고 xml에

        <com.example.myapplication.CustomTextView
            android:id="@+id/txt_123"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="abcdefgdddddd"
            />
    

    이렇게 지정해주시면 됩니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.