티스토리 뷰

TextView의 테두리는 drawable을 통해 둥글게 바꿀 수 있다.
background를 미리 만들어둔 drawable로 바꿔준 후 backgroundTint로 색깔을 설정해주면 색깔도 바뀐다.

그런데 동적으로 textView의 색깔을 바꾸고 싶으면 어떡할까?
버튼을 클릭했을 때, setBackgroundColor로 배경을 설정해주면
색깔은 지정되어도 테두리가 default(직사각형)로 바뀐다.

그럴땐 아래와 같이 하면 된다.

1. RoundedTextView 클래스를 만든다.

(참고) package obliviate는 제가 만들고있는 앱(프로젝트) 이름입니다

package com.example.obliviate;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Path;
import android.util.AttributeSet;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;

public class RoundedTextView extends AppCompatTextView {

    private Context context;
    private Path path;

    public RoundedTextView(@NonNull Context context) {
        super(context);
        init(context);
    }

    public RoundedTextView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public RoundedTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    public void init(Context context) {
        this.context = context;
    }

    @Override
    public void draw(Canvas canvas) {
        path = new Path();
        path.addRoundRect(0, 0, getWidth(), getHeight(), 50, 50, Path.Direction.CW);

        canvas.clipPath(path);
        super.draw(canvas);
    }
}


2. Layout에서 TextView -> RoundedTextView로 사용

<LinearLayout
            android:gravity="center"
            android:fontFamily="@font/main_font"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="10dp"
            android:layout_marginHorizontal="30dp">
            <com.example.obliviate.RoundedTextView
                android:id="@+id/dialog_text"
                android:layout_marginHorizontal="20dp"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:fontFamily="@font/main_font"
                android:text="TEST"
                android:textColor="@color/black"
                android:gravity="center"
                android:textSize="14sp"
                android:background="@color/ivory"/>
        </LinearLayout>


3. 색깔 바꿔주기

ex) dialogBackgroundColorBtn1 버튼을 입력했을 때, dialogText(dialog_text)의 배경색깔 변경하기

binding?.dialogBackgroundColorBtn1 -> {
                binding?.dialogText?.setBackgroundColor(context.resources.getColor(R.color.dialogColor1))
            }

 

4. 결과

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday