PHP

[안드로이드 스튜디오] Toast팝업 커스터마이징 하기

미스털이 사용자 2024. 11. 3. 15:00
반응형

Toast가 항상 아래부분에 정형화된 짧막한 메시지만 전달한다고 생각해서 다르게 만들어봤다.

 

public class CustomToast {
    public static Toast createToast(Context context, String message) {
        LayoutInflater inflater = LayoutInflater.from(context);
        ToastCustomBinding binding = DataBindingUtil.inflate(inflater, R.layout.toast_custom, null, false);

        binding.tvSample.setText(message);

        Toast toast = new Toast(context);
        toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, toPx(10));
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(binding.getRoot());

        return toast;
    }

    private static int toPx(int dp) {
        return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
    }
}

 

우선 다음과 같이 CustomToast를 만들었다.

 

그리고 DataBindingUtil이 참조가 안될 수 있다. 이럴 때엔 앱수준의 build.gradle 파일 열어서 설정한다.

 

 

 

바인딩의 타입 이름(ToastCustomBinding)은 내가 만든 xml파일에 의해 결정되는 듯 싶다..

xml에서 toast_custom이라 만드니, ToastCustomBinding이 나와서말이다..

 

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.cardview.widget.CardView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:cardBackgroundColor="#2B353E"
        app:cardCornerRadius="12dp"
        app:cardElevation="3dp">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingStart="10dp"
            android:paddingEnd="10dp"
            android:paddingVertical="10dp"
            >

            <TextView
                android:id="@+id/tvSample"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="20dp"
                android:text="Hello World!"
                android:textColor="@android:color/white"
                android:textSize="15dp"

                android:theme="@style/TimePickerStyle_main"

                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toStartOf="@id/ivSample"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <ImageView

                android:id="@+id/ivSample"
                android:layout_width="40dp"
                android:layout_height="40dp"

                android:src="@drawable/ic_toast"
                android:background="@drawable/gradient_cardview"
                android:clipToOutline="true"

                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@id/tvSample"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.cardview.widget.CardView>
</layout>

 

그리고 xml파일을 위처럼 만들었더니 다음과 같이 미리보기 화면이 만들어졌다.

 

 

그러면 마지막으로 이를 클래스에 선언된 메소드를 사용해서 만들어보자

 

 

결과 화면)

반응형