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


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

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

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

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

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

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

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


조회수 984


Banner summercoding 2x copy mjjdfw

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"
        />

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


  • 감사합니다!    TuTanKhamen   2016.4.16 11:56     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close