我正在尝试使用android daynight主题在我的android应用中实现深色主题。它当前改变了主题,但是我不认为它会像我想要的那样重新创建活动。在Java中,他们有AppCompatDelegate.setDefaultNightMode()
显然现在会自动重新创建活动,但是我无法在xamarin android中找到执行此操作的C#方法?
我当前的实现是:
switch (selectedSpinnerItem)
{
case "Light":
((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightNo);
break;
case "Dark":
((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightYes);
break;
case "System Preference":
((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightFollowSystem);
break;
}
我认为这不是正确的方法。
答案 0 :(得分:1)
首先,您的代码仅适用于AndroidQ。 https://developer.android.com/guide/topics/ui/look-and-feel/darktheme#force_dark
如果您希望它起作用,也可以像下面的代码一样在<item name="android:forceDarkAllowed">true</item>
中添加styles.xml
。
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:forceDarkAllowed">true</item>
</style>
</resources>
我在((AppCompatActivity)this).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightYes);
方法中使用OnCreate
进行设置。这里正在运行sceenshot。
更新
这是我的演示。 https://github.com/851265601/Xamarin.Android_ListviewSelect/blob/master/App16.zip