スマホユーザーならおなじみのこちら、プログレスバー
今回はこれを Xamarin.Forms 上で表示していきます。
MessagingCenterでプラットフォーム別に処理を書く
今回行いたい処理は各プラットフォームごとに異なる為、共通コードからMessagingCenterを使って呼び出します。
まずはAndroidの実装です。
// MainActivity.cs
AlertDialog dialog = null;
MessagingCenter.Subscribe<App, bool>(this, "dialog_progress", (app, b) =>
{
if (dialog != null)
{
dialog.Dismiss();
dialog = null;
}
if (b) {
var p = new Android.Widget.ProgressBar(this);
p.SetPadding(0, 50, 0, 50);
dialog = new AlertDialog.Builder(this)
.SetTitle("処理中...")
.SetView(p)
.SetCancelable(false)
.Show();
}
});
Androidでダイアログの生成には AlertDialog を使います。
え、プログレスバーを表示したいんだから ProgressDialog を使えばいいじゃん?と思った方もいると思います。
残念ながら ProgressDialog はAPI Level 26で非推奨になってしまったのです。。。
よって自分で作ったほうがいいわけです。
この例では AlertDialog のView に Widget.ProgressBar を追加して表示させています。
また、そのままだと上下に隙間がなくなってしまうのでp.SetPadding(0, 50, 0, 50) 上下に空間を開けています。
SetCancelable(false) を追加することにより、画面(ダイアログの外側)
をタップしても画面が閉じないようにしています。
共通コードから呼び出す
では実装ができたところで共通コードから呼び出します。
呼び出しはとても簡単で
MessagingCenter.Send(App, "dialog_progress",true); // 表示
MessagingCenter.Send(App, "dialog_progress",false); // 非表示
と書くだけです。簡単ですね!
ここまで読んでくれてありがとうございました!!
ホームページでは他にも
・様々な記事や作った作品および過程
・ソースコード、素材ファイル
・あらゆる”モノ”の作り方
などなど随時、記事や作品を新規公開・更新していますので是非見ていってくださいね!見ていただけると本当に嬉しいです!