如何在Xamarin Forms中为特定页面使用不同主题?

时间:2018-05-21 15:17:29

标签: xamarin xamarin.forms xamarin.android

我的应用有默认主题。我使用Android中的Style文件自定义此主题。但我正在创建一个登录页面,我想要使用其他主题。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

我不确定你能做到这一点,因为Android主题可以应用于Android中的活动,但是Xamarin.Forms在一个活动中“运行”,所以你必须在Xamarin.Forms中进行样式化。查看开发人员能够在运行时更改主题的this post on Xamarin Forums,然后重新启动活动,然后重新启动他的Xamarin.Forms应用程序。

答案 1 :(得分:0)

如果您的Xamarin Forms应用程序仅使用一项活动,那么这非常简单。此解决方案适用于棒棒糖及其后的版本。您可以使用特定于平台的Android代码来做到这一点:

public class StatusBarStyleManager : IStatusBarStyleManager
{
    public void SetStatusBarColor(Android.Graphics.Color color)
    {
        if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                var currentWindow = GetCurrentWindow();
                currentWindow.DecorView.SystemUiVisibility = (StatusBarVisibility)SystemUiFlags.LightStatusBar;
                currentWindow.SetStatusBarColor(color);
            });
        }
    }

    Window GetCurrentWindow()
    {
        //Note this is a nuget package for retrieving the activity.
        var window = CrossCurrentActivity.Current.Activity.Window;

        // clear FLAG_TRANSLUCENT_STATUS flag:
        window.ClearFlags(WindowManagerFlags.TranslucentStatus);

        // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
        window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);

        return window;
    }
}

然后只需在页面中使用此实现,即可设置其在状态栏中显示的特定颜色。

在我自己的项目中需要此文章时,受到本文的启发: https://evgenyzborovsky.com/2018/08/20/dynamically-changing-the-status-bar-appearance-in-xamarin-forms/