PCL Acr.UserDialogs。自定义样式为android

时间:2017-03-09 10:35:40

标签: xamarin.android

我在Xamarin MvvmCross项目中使用Acr.UserDialogs插件。 一切都很好,但发现在Android 7.0上警告对话框有隐形的Ok按钮(在以前的版本中它显示正确)。

我发现在创建“警告”对话框时,通过AndroidResourceId属性重新定义样式的方法,但在我的情况下,此对话框是在PCL中创建的:

await userDialogs.AlertAsync(new AlertConfig { Message = message });

所以我不适合硬编码resourceId(它们被重新生成,而常见的PCL嵌入式资源是一个坏主意)。

我尝试实现自己的类,派生自UserDialogImpl或AbstractUserDialog,但在构造函数中解析Activity时出现问题。

我以这种方式初始化对话框:

UserDialogs.Init(() => Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity);
userDialogs = Mvx.Resolve<IUserDialogs>();

看,还有一个动作参数,传递给AlertAsync,但找不到在android项目中处理它的方法。

还有另一种方法可以在android项目中自定义userDialog的样式吗?

1 个答案:

答案 0 :(得分:2)

如果您有对话主题...

<style name="YourDialogThemeHere" parent="Theme.AppCompat.DayNight.Dialog">
  <item name="colorAccent">@color/accent</item>
</style>

...然后你可以在你的Droid项目中一次性主题所有对话框:

   var dialogStyle = Resource.Style.YourDialogThemeHere;
   AlertConfig.DefaultAndroidStyleId = dialogStyle;
   PromptConfig.DefaultAndroidStyleId = dialogStyle;
   ConfirmConfig.DefaultAndroidStyleId = dialogStyle;
   ActionSheetConfig.DefaultAndroidStyleId = dialogStyle;
   DatePromptConfig.DefaultAndroidStyleId = dialogStyle;
   TimePromptConfig.DefaultAndroidStyleId = dialogStyle;
   LoginConfig.DefaultAndroidStyleId = dialogStyle;

如果您想对Droid项目中的对话框做出反应,那么您可以使用MvvmCross Messenger插件从PCL项目发送消息。当PCL项目发布消息时,特定于平台的视图可以订阅消息。