Как градиентно заполнить строку состояния системы с помощью Xamarin - PullRequest
0 голосов
/ 05 июня 2019

У меня есть приложение Xamarin, главная страница которого выглядит как

GUI

это выглядит хорошо (дело только с Android). Но я хочу, чтобы системная панель инструментов (панель, показывающая прием, батарею и т. Д.) Была того же цвета и с тем же градиентом, что и ToolBar. Так что-то, что выглядит как

Wanted

У меня есть следующий код для CustomPageRenderer в проекте Android

[сборка: ExportRenderer (typeof (ContentPage), typeof (CustomPageRenderer))] Пространство имен Prox.Droid.Renderers { открытый класс CustomPageRenderer: PageRenderer { public CustomPageRenderer (Context context): base (context) {}

    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", это просто не работает в баре. Я посмотрел на Этот вопрос и ответы , но это не помогло.

Я также пытался использовать пользовательский NavigationBar с фоном, установленным следующим образом

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

Нет радости.

Q. Как сделать так, чтобы системная панель инструментов сливалась с панелью инструментов?

1 Ответ

0 голосов
/ 05 июня 2019

Есть несколько способов сделать это!

Более простой способ - сделать строку состояния прозрачной и сделать панель инструментов с градиентом больше. Вы можете проверить, является ли версия SDK больше или равна kitkat, а затем добавить флаги, чтобы макет не имел ограничений и навигация была прозрачной. Затем прямо в макете разместите фон с вашим градиентом и добавьте заголовок или заголовок панели инструментов.

...