내일은개발왕

[안드로이드 스튜디오] ProgressBar가..죽었네? 로딩창 직접 만들자 본문

프론트앤드

[안드로이드 스튜디오] ProgressBar가..죽었네? 로딩창 직접 만들자

NDN 2024. 7. 1. 18:57

ProgressDialog가 더 이상 사용 안된다. HCI 과목 팀플하다 팀원이 짠 코드 보니 저게 죽어있더라.. 

그리고 디자인을 따로 적용시켜야 했었기에, 커스텀해서 사용하기로 했다. 근데 어캐해야할지 모르겠어서 ㅎ..

내가 원하는 디자인은 위 이미지와 같은 로딩창이었다.

그래서 대체할만한 것을 찾고 있었는데, StackOverFlow에 좋은 방법이 있길래 이걸 사용했다.


 

1. 로딩창 xml 만들기

일단 사용할 xml을 만들어주자

이건 뭐 설명할 없으니 이미지랑 코드만 두겠다. 로딩 애니메이션을 넣고 싶었어서, SpinKit를 사용했다.

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background_white">

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="200dp"
        android:layout_height="230dp"
        android:background="@drawable/background_white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.github.ybq.android.spinkit.SpinKitView
        android:id="@+id/spinkit_progress"
        style="@style/SpinKitView.DoubleBounce"
        android:layout_width="80dp"
        android:layout_height="90dp"
        android:layout_marginBottom="38dp"
        app:SpinKit_Color="@color/main_color"
        app:layout_constraintBottom_toTopOf="@+id/textView20"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/textView20"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"
        android:text="AI가 열심히 첨삭중이에요."
        android:fontFamily="@font/pretendard_medium"
        android:textSize="14sp"
        android:textColor="@color/black"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

SpinKit를 사용하고 싶다면 gradle에 아래 코드를 추가하면 된다.

 val SpinKitVersion = "1.4.0"
 implementation("com.github.ybq:Android-SpinKit:$SpinKitVersion")

 


2. dialog 코드 만들기

Dialog를 상속받아서 코드를 작성한다. 근데 왜 Dialog를 사용해서 보여주는 것인가? 싶었다.

이유를 좀 생각해봤는데, 아무래도 커스텀이 쉽고 dismiss를 통해 쉽게 사용할 수 있어서 그런 것 같다.

package com.example.maketeam_app.base

import android.annotation.SuppressLint
import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ProgressBar
import androidx.fragment.app.DialogFragment
import com.example.maketeam_app.R
import com.github.ybq.android.spinkit.style.DoubleBounce

/**
 * progressDialog 지원중지로, Dialog 사용해서 만듬
 * 참고 : https://stackoverflow.com/questions/45373007/progressdialog-is-deprecated-what-is-the-alternate-one-to-use
 * */
class BaseProgressDialog {
    companion object {
        @SuppressLint("InflateParams")
        fun progressDialog(context : Context) : Dialog {
            val dialog = Dialog(context)
            val inflate = LayoutInflater.from(context).inflate(R.layout.dialog_progress_loading, null)

            val progressBar = inflate.findViewById<ProgressBar>(R.id.spinkit_progress) //만들어둔 xml과 연결시켜주기
            val doubleBounce = DoubleBounce() //spinkit 사용하기 위해, 관련 코드 추가
            progressBar.indeterminateDrawable = doubleBounce

            dialog.setContentView(inflate)
            dialog.setCancelable(false)
            dialog.window!!.setBackgroundDrawable(
                ColorDrawable(Color.TRANSPARENT)) //배경색 투명하게 해주기

            return dialog
        }
    }

}

주석으로 설명을 간단하게 적어두긴 했는데, 어려운건 없다. 


3. 불러와서 사용하기

 var dialog = BaseProgressDialog.progressDialog(requireContext()) //dialog선언
 dialog.show()// 보여주길  원할때
 dialog.dismiss()//종료하길 원할때

이러면 끝!

잘 동작한다!

 

https://stackoverflow.com/questions/45373007/progressdialog-is-deprecated-what-is-the-alternate-one-to-use

 

ProgressDialog is deprecated.What is the alternate one to use?

I have come across to see that ProgressDialog is now deprecated. What would be alternate one to use in place of that apart from ProgressBar. I am using android studio version 2.3.3. ProgressDialog

stackoverflow.com

https://developer.android.com/reference/android/app/Dialog

 

Dialog  |  Android Developers

 

developer.android.com