728x90
오늘은 안드로이드에서 Custom SnackBar 를 만들어 보겠습니다.
SnackBar 로 사용할 xml 파일을 만들어 줍니다.
<?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"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/size08"
android:background="@drawable/bg_roundbox_gray08_08_dp"
android:paddingHorizontal="@dimen/size16"
android:paddingVertical="@dimen/size15"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_std_regular"
android:gravity="center"
android:lineSpacingExtra="@dimen/size04"
android:textColor="@color/grayscale_01"
android:textSize="@dimen/size14"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/size16"
android:fontFamily="@font/pretendard_std_bold"
android:gravity="center"
android:lineSpacingExtra="@dimen/size04"
android:textColor="@color/primary_lighter_03"
android:textSize="@dimen/size14"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/textView"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Class 파일을 하나 생성해줍니다.
//사용할 TextView 가 2개 임으로 파라미터에 2개의 String 을 넣어준다. 한개는 callBack 메소드이다.
class SnackBar(
view: View,
private val message: String,
private val message2: String,
private val callback: () -> Unit
) {
companion object {
fun make(view: View, message: String, message2: String, callback: () -> Unit) =
InAppSnackBar(view, message, message2, callback)
}
private val context = view.context
private val snackbar = Snackbar.make(view, "", 2000) // 시간을 나타낸다.
private val snackbarLayout = snackbar.view as Snackbar.SnackbarLayout
private val inflater = LayoutInflater.from(context)
// 만들었던 layout binding 시켜준다.
private val snackbarBinding: LayoutInAppSnackBarBinding =
DataBindingUtil.inflate(inflater, R.layout.layout_in_app_snack_bar, null, false)
init {
initView()
initData()
}
private fun initView() {
with(snackbarLayout) {
removeAllViews()
setPadding(0, 0, 0, context.dpToPxSize(120))
setBackgroundColor(ContextCompat.getColor(context, android.R.color.transparent))
addView(snackbarBinding.root, 0)
}
}
private fun initData() {
// 파라미터로 가져왔던 String 을 TextView 에 set 해준다.
snackbarBinding.textView.text = message
snackbarBinding.textView2.text = message2
// 파라미터로 가져왔던 메소드를 넣어준다.
snackbarBinding.textView2.setOnClickListener {
snackbar.dismiss()
callback()
}
}
fun show() {
snackbar.show()
}
}
사용법.
private fun showSnackBar() {
SnackBar(binding.root, SNACK_TITLE, SNACK_BUTTON_TITLE) {
//TODO.
}.show()
}
이상입니다!
'안드로이드' 카테고리의 다른 글
[Android Studio] List< Object > 조건에 따라 리스트 중복제거 (코틀린) (0) | 2023.09.15 |
---|---|
[Android Studio] flexbox Layout 사용하기 (코틀린) (0) | 2023.09.14 |
[Android Studio] 2/3 지점으로 Layout 생성해야할 때 (Tip.) (0) | 2023.08.17 |
[Android Studio] BottomSheetDialogFragment, setCancelable 설정하기 (코틀린) (0) | 2023.07.28 |
[Android Studio] 리사이클러뷰 깜박거림 제거 (0) | 2023.07.21 |