如何使用 Xamarin 渐变填充系统状态栏

Posted

技术标签:

【中文标题】如何使用 Xamarin 渐变填充系统状态栏【英文标题】:How to Gradient Fill the System Status Bar using Xamarin 【发布时间】:2019-06-05 14:53:24 【问题描述】:

我有一个 Xamarin 应用程序,其主页看起来像

这看起来不错(仅处理 android)。但我想要的是系统工具栏(显示接收、电池等的栏)与ToolBar 具有相同的颜色和相同的渐变。所以看起来像

我在Android项目中有CustomPageRenderer的以下代码

[程序集:ExportRenderer(typeof(ContentPage), typeof(CustomPageRenderer))] 命名空间 Prox.Droid.Renderers 公共类 CustomPageRenderer : PageRenderer 公共CustomPageRenderer(上下文上下文):基础(上下文)

    protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    
        base.OnElementChanged(e);

        var toolbar = MainActivity.RootFindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
        if (toolbar == null)
            return;

        // Default theme colors come from the shared project. 
        DefaultTheme defaultTheme = new DefaultTheme();
        toolbar.SetBackground(new GradientDrawable(GradientDrawable.Orientation.RightLeft,
            new int[]  defaultTheme.ThemeLightColor.ToAndroid(), defaultTheme.ThemeDarkColor.ToAndroid() ));
    

我的styles.xml 看起来像

<?xml version="1.0" encoding="utf-8" ?>
<resources>

    <style name="MainTheme" parent="MainTheme.Base"></style>

    <!-- Base theme applied no matter what API -->
    <style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>

        <item name="colorPrimary">#17AEC6</item>
        <!-- colorPrimaryDark is used for the status bar -->
        <item name="colorPrimaryDark">#009FB6</item>
        <!-- colorAccent is used as the default value for colorControlActivated which is used to tint widgets -->
        <item name="colorAccent">#93CD8B</item>
        <!-- You can also set colorControlNormal, colorControlActivated colorControlHighlight and colorSwitchThumbNormal. -->
        <item name="windowActionModeOverlay">true</item>

        <item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item>
    </style>

    <style name="AppCompatDialogStyle" parent="Theme.AppCompat.Light.Dialog">
        <item name="colorAccent">#17AEC6</item>
    </style>
</resources>

我尝试添加以下内容的地方

<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

到样式“MainTheme”,这只是灰色的栏。我看过This Question and Answers,但这并没有帮助。

我也尝试使用自定义NavigationBar,背景设置如下

public class CustomNavigationPage : NavigationPage

    public CustomNavigationPage()  
    public CustomNavigationPage(Page root) : base(root) 
    
        BarBackgroundColor = Color.Transparent;
        BarTextColor = Color.White;
    

没有快乐。

问。如何让系统工具栏与ToolBar融为一体?

【问题讨论】:

您可以尝试在mainactivity中设置Window.AddFlags(WindowManagerFlags.TranslucentStatus); Window.AddFlags(WindowManagerFlags.LayoutNoLimits);,并在Resources/drawable中写入gradient.xml,将工具栏的背景更改为gradient.xml 【参考方案1】:

有多种方法可以做到这一点!

更简单的方法是将状态栏设置为透明,并使具有渐变的工具栏更大。 您可以检查 SDK 版本是否大于或等于 kitkat,然后添加标志,以便布局没有限制并且导航是半透明的。然后直接在你的布局中,用你的渐变放置背景并添加你想要添加的任何标签/工具栏标题。

【讨论】:

以上是关于如何使用 Xamarin 渐变填充系统状态栏的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController + 状态栏框架的CGRect

Xamarin Android - 自定义通知托盘图标(状态栏)

如何在android中将状态栏背景设置为渐变色或drawable

如何使菜单栏填充屏幕宽度?

如何在 iOS 的 xamarin 表单中创建渐变按钮背景

Material Design 中呈现的 Android Lollipop 上的半透明渐变状态栏