반응형
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파일을 위처럼 만들었더니 다음과 같이 미리보기 화면이 만들어졌다.
그러면 마지막으로 이를 클래스에 선언된 메소드를 사용해서 만들어보자
결과 화면)
반응형
'PHP' 카테고리의 다른 글
activity를 1번만 notify 시키게 하기 (3) | 2024.10.30 |
---|---|
remove actionBar, navigationBar programmatically (0) | 2024.10.30 |
[Material-Calendar 응용] 특정한 날짜들에 스타일 적용시켜주기 (DayViewDecorator응용) (0) | 2024.10.23 |
[Material-calendar] 날짜(각 칸, 항목) 스타일을 한 번에 잡아주는 selector xml (1) | 2024.10.21 |
[Android Studio] material-calendar의 지정된 날짜에 decorate해주기 (1) | 2024.10.17 |