Скрытая панель навигации в формах xamarin отображается, когда на экранной клавиатуре появляется Android - PullRequest
1 голос
/ 16 июня 2020

Для проекта нижняя панель навигации в приложении android должна быть невидимой. Нашел этот код при просмотре, и он работает изначально: Это некоторый код в MainActivity.cs

protected override void OnCreate(Bundle savedInstanceState)
{
    TabLayoutResource = Resource.Layout.Tabbar;
    ToolbarResource = Resource.Layout.Toolbar;

    base.OnCreate(savedInstanceState);
    HideNavAndStatusBar();
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
    LoadApplication(new App());
}

private void HideNavAndStatusBar()
{
    int uiOptions = (int)Window.DecorView.SystemUiVisibility;
    uiOptions |= (int)SystemUiFlags.LowProfile;
    uiOptions |= (int)SystemUiFlags.Fullscreen;
    uiOptions |= (int)SystemUiFlags.HideNavigation;
    uiOptions |= (int)SystemUiFlags.ImmersiveSticky;
    Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;
}

Этот код работает до тех пор, пока не появится экранная клавиатура при нажатии на запись. При этом снова отображается панель навигации, и она остается включенной, даже когда клавиатура закрыта. Точно так же, когда нажимается средство выбора, панель навигации также появляется, когда окно средства выбора закрывается, панель навигации снова исчезает.

Этот код будет использоваться для внутренней системы, и очень важно, чтобы пользователь не может go и возиться с android os.

Есть идеи, как это исправить?

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Этот код работает до тех пор, пока не появится экранная клавиатура при нажатии на запись. При этом снова отображается панель навигации, и она остается включенной, даже когда клавиатура закрыта.

Когда вы щелкаете Entry или Picker, эта панель навигации появляется, ее нельзя изменить. Но если клавиатура или средство выбора исчезают, сделайте скрыть панель навигации, это можно сделать, как этот GIF.

enter image description here

Вы можете позвонить HideNavAndStatusBar снова в событии SystemUiVisibilityChange, как в следующем коде.

  [Activity(Label = "App31", Icon = "@mipmap/icon", Theme = "@style/MainTheme",WindowSoftInputMode =SoftInput.AdjustPan, MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;
            HideNavAndStatusBar();

            Window.DecorView.SystemUiVisibilityChange += DecorView_SystemUiVisibilityChange;
            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);          
            LoadApplication(new App());
        }

        private void DecorView_SystemUiVisibilityChange(object sender, View.SystemUiVisibilityChangeEventArgs e)
        {

            HideNavAndStatusBar();
        }


        private void HideNavAndStatusBar()
        {
            int uiOptions = (int)Window.DecorView.SystemUiVisibility;
            uiOptions |= (int)SystemUiFlags.LowProfile;
            uiOptions |= (int)SystemUiFlags.Fullscreen;
            uiOptions |= (int)SystemUiFlags.HideNavigation;
            uiOptions |= (int)SystemUiFlags.ImmersiveSticky;
            uiOptions |= (int)SystemUiFlags.LayoutStable;

            Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;
        }
}
0 голосов
/ 18 июня 2020

Если у вас есть полный контроль над устройством, оно будет работать. Как и в случае с моей проблемой, это лучшее решение, так как оно не позволяет отображать навигацию где-либо (что может быть проблемой c, но в некоторых случаях это может быть именно то, что вам нужно). Если у вас есть рутированное устройство, вы можете использовать мост отладки Android (adb.exe), чтобы всегда удалять панель навигации. Это запретит пользователю использовать go в ОС.

adb shell pm disable com.android.systemui

Я нашел это в этой ссылке на переполнение стека (ответ NartusTeam) Есть ли способ скрыть панель системы / навигации в Android ICS

...