AiForms.Dialogsについては、別の質問で回答があるようなので、こちらでは、前の質問でも出したAcr.UserDialogsを利用した標準のダイアログ(AlertDialog)でのやり方を書いておきます。(ちなみに、DisplayAlertではできません)
前の質問では、styles.xmlに
xml
1<resources>
2 <style name="MainTheme" parent="MainTheme.Base">
3 </style>
4 <!-- Base theme applied no matter what API -->
5 <style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
6 ...
7 <item name="alertDialogTheme">@style/MyAlertDialogStyle</item>
8 </style>
9 <style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog">
10 <item name="android:background">#FFD9E3</item>
11 </style>
12</resources>
のように、<item name="alertDialogTheme">@style/MyAlertDialogStyle</item>
を追加するように書きましたが、これでは、全てのダイアログの色が変わってしまうことになります。Acr.UserDialogsでは、ダイアログごとにstyleのidを渡すことができるので、個別に色を変えることができます。ただ、そのためには、Androidプロジェクトの方から、styleのidを引っ張ってこないといけません。こんな時は、DependencyServiceでやるのがセオリーなのですが、今回の場合は、固定値を取得したいだけなので、App
クラスのコンストラクタで渡してしまうことにします。
共通プロジェクト
C#
1public partial class App : Application
2{
3 public static int DialogStyleId { get; private set; }
4
5 public App(int dialogStyleId = 0)
6 {
7 InitializeComponent();
8
9 DialogStyleId = dialogStyleId;
10
11 MainPage = new MainPage();
12 }
13}
Androidプロジェクト
C#
1public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
2{
3 protected override void OnCreate(Bundle savedInstanceState)
4 {
5 TabLayoutResource = Resource.Layout.Tabbar;
6 ToolbarResource = Resource.Layout.Toolbar;
7
8 base.OnCreate(savedInstanceState);
9
10 UserDialogs.Init(this);
11
12 global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
13 LoadApplication(new App(Resource.Style.MyAlertDialogStyle));
14 }
15}
このDialogStyleId
を使って以下のようにしてダイアログを表示します。
C#
1await UserDialogs.Instance.ConfirmAsync(new ConfirmConfig()
2{
3 AndroidStyleId = App.DialogStyleId,
4 Title = "商品の取り消し",
5 Message = $"選択された{data.ItemName}を取り消しをしますか?",
6 OkText = "はい",
7 CancelText = "いいえ"
8});
styleを設定すれば、色以外にもいろいろカスタマイズができます。この記事も参考になるかと思います。