我在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的样式吗?
答案 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项目发布消息时,特定于平台的视图可以订阅消息。