c# - 切换主题 xamarin.android
问题描述
我正在尝试使用 Xamarin.Android 制作一个应用程序,其中我有一个包含所有主题的 RadioGroup。当检查组中的某个 RadioButton 时,我试图更改主题,但它似乎不起作用。任何想法为什么?
样式.xml
<resources>
<style name="LightTheme" parent="android:Theme.Material.Light.DarkActionBar">
<item name="android:colorPrimary"> @color/blue</item>
<item name="android:windowBackground"> @color/grey</item>
<item name="android:colorAccent"> @color/yellow </item>
</style>
<style name="DarkTheme" parent="android:Theme.Material.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:colorPrimary"> @color/green </item>
<item name="android:colorPrimaryDark"> @color/blue </item>
<item name="android:colorAccent"> @color/purple </item>
<item name="android:windowBackground"> @color/dark_blue </item>
</style>
</resources>
布局.axml
<RadioGroup
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/errorMsg"
android:onClick ="Change"
android:id="@+id/radGrp">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Dark"
android:id="@+id/radDark" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Light"
android:id="@+id/radLight" />
</RadioGroup>
MainActivity.cs
RadioGroup radGrp = FindViewById<RadioGroup>(Resource.Id.radGrp);
radGrp.CheckedChange += Change;
private void Change(object sender, RadioGroup.CheckedChangeEventArgs e)
{
try
{
switch (e.CheckedId)
{
case Resource.Id.radDark: this.SetTheme(Resource.Style.DarkTheme); break;
case Resource.Id.radLight: this.SetTheme(Resource.Style.LightTheme); break;
}
}
catch (Exception ex)
{
errMsg.Text = ex.Message;
}
}
我是否需要更改 AndroidManifest.xaml 或 [Activity(Label = "@string/app_name", Theme=... , MainLauncher = true)] 中的某些内容?
解决方案
这是在 Android 上实现主题的方式的限制/功能。在 Activity 运行 OnResume 之前,更改 Activity 的主题实际上不会生效,因此您必须有效地重新启动 Activity。您可以使用多种策略来尽量减少对用户的影响。Xamarin 实际上提供了一个示例主题切换器应用程序,它可能是实现某些东西的一个很好的参考:https ://developer.xamarin.com/samples/monodroid/android5.0/ThemeSwitcher/
推荐阅读
- c# - 使用异步/等待的彗星式 API 消耗
- java - 在 Java JSch Shell 中获得两次 shell 提示
- python - ExponentialDecay 位于具有嵌入权重的不同图中
- scala - Scala Map 上是否明确定义了 take 函数?
- spring - 过滤器(在 Spring Boot Web 应用程序中)能否根据所有定义的 RequestMapping 验证请求 URL?
- javascript - HTML文件中的Javascript不会输出变量
- r - 我无法在 R 中拼接降价,接收和错误;我该如何解决这个问题?更新:
- ruby-on-rails - ActiveAdmin 按嵌套关联排序
- c# - 记忆游戏 - 如何匹配不同的图像?
- bash - crontab 看不到 shell 命令的 $1 参数