AndroidでProgressDialogが非推奨に…独自実装してみた

昔のAndroidではProgressDialogが使えました。

▼ こんな用途にとても便利だった

  • 現在の進捗パーセントを表示したり、
  • 進捗プログレスバーも表示できる

ただ今はProgressDialogは非推奨です。

でもプログレスダイアログが表示したいので、
AndroidでProgressDialogを独自実装してみました。

APIレベル26からProgressDialogは非推奨

非推奨になったのはAPIレベル26から

Android8.0 = Oreoからですね。

▼ ProgressDialog | Android Developers

This class was deprecated in API level 26.
ProgressDialog is a modal dialog, which prevents the user from interacting with the app. Instead of using this class, you should use a progress indicator like ProgressBar, which can be embedded in your app's UI. Alternatively, you can use a notification to inform the user of the task's progress.

引用元 : https://developer.android.com/reference/android/app/ProgressDialog

▼ 上記リファレンスの意訳

このクラスはAPIレベル26から非推奨になりました。ProgressDialogはモーダルダイアログであり、それはユーザーの操作を妨げてしまいます。これを使う代わりに、アプリUIに埋め込まれたプログレスメーターを使うべきです。あるいはタスク進捗の表示に通知を使うとか

引用元 : https://developer.android.com/reference/android/app/ProgressDialog

これを使うのはUI的にダメみたいです。

でもProgressDialogは進捗を分かりやすく表示できます。もし通知バーだと見逃されたり無効化されるかもしれません。

だからProgressDialogを独自実装しました。

1.ProgressDialog用レイアウト作成

初めにしたのがレイアウトの作成です。

▼ レイアウトに含まれる内容

  • 進捗表示のProgressBar
  • 進捗を表示するTextView

▼ 作成したレイアウト
▼ 名前は dialog_progress.xml とした

これはそのままコピペでOKです。

2.DialogFragmentからProgressDialog定義

次にProgressDialog本体を定義します。

DialogFragmentを拡張して作りました。

▼ こんな内容(ProgressDialog.kt)

ほとんど説明はいらないと思います。

独自ダイアログを作りたいなら独自レイアウトを定義し、DialogFragmentを拡張するのが王道です。コード量もそこまで多くありません。

これで自作ProgressDialogの完成です。

3.進捗を独自ProgressDialogで表示

実際にProgressDialogを表示してみます。

▼ 模擬的なコード例

上記コードではFuelライブラリを使ってます。

▼ KotlinからRest APIを数行コードで呼び出し

それで上記ライブラリで数百MBのファイルのダウンロードなどを想定し、進捗が進むごとにProgressDialogで進捗バー・テキストを表示するコードを書きました。

実際に表示できるProgressDialogの見た目

どういった見た目になったかを載せときます。

▼ 進捗0%のときのProgressDialog

進捗0%のときのProgressDialog

▼ 進捗38%のときのProgressDialog

進捗38%のときのProgressDialog

▼ 進捗100%のときのProgressDialog

進捗100%のときのProgressDialog

タイトルやメッセージも自由にカスタマイズ可能。

むしろ既存のProgressDialogより便利かもしれません。

自前のProgressDialog実装が難しくない

ここまでの流れをまとめると次の通り

  1. ProgressDialog用レイアウト作成
  2. DialogFragmentからProgressDialog定義
  3. 進捗を独自ProgressDialogで表示

手順を1つ1つ踏んでいけば難しくありません。

以上、ProgressDialog自前実装でした。ではまた