Скрыть 3 нижние кнопки (Назад/Домой/Недавние) (полноэкранный режим Android)

Я разрабатываю приложение для проверки цен на устройстве Android (версия ОС 7.1.2, уровень API 25) с использованием .NET MAUI RC3.

Мне удалось заставить строку состояния вверху исчезнуть, а также панель навигации .NET MAUI, используя Shell.NavBarIsVisible="False", однако я застрял в попытке отключить панель навигации Android внизу:

What I want to hide...

Я пытался:

  • NavigationPage.HasNavigationBar="False" в
  • NavigationPage.HasNavigationBar="False" в
  • NavigationPage.HasNavigationBar="False" в

Я установил это в MainActivity, но он удаляет только строку состояния вверху:

public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        this.Window.AddFlags(Android.Views.WindowManagerFlags.Fullscreen);
    }
}

Все примеры, которые я нашел для скрытия кнопок навигации, терпят неудачу с синтаксическими ошибками по разным причинам:

  • В DecorView нет метода SetSystemUiVisibility.
  • Android.Views.WindowManagerFlags не имеет всех флагов, таких как «иммерсивный» и т. д.
  • WindowInsetsController недоступен в API версии 25.

Любая помощь будет оценена по достоинству.

Спасибо,

Йорг.

Вы экспериментировали с разными минимальными и целевыми версиями API? Упомянутые вами механизмы относятся к разным уровням API; Я ожидал, что какая-то комбинация сработает. НО, возможно, Android 11 и/или 12 слишком отличаются от исходной версии SetSystemUIVisibility (KitKat?) ... Если вы укажете минимум API 30, то есть ли там WindowInsetsController?

ToolmakerSteve 17.05.2022 03:54

Привет @ToolmakerSteve. Я установил <uses-sdk android:minSdkVersion="25" android:targetSdkVersion="25"/>, так как это уровень API, для которого я сейчас специально разрабатываю. Однако у меня есть предупреждение в VS2022 о том, что «targetFrameworkVersion» выше, чем targetSdkVersion, и что по этой причине будет использоваться ACW-31, но у меня нет способа установить конкретную targetFrameworkVersion (попробовал в .csproj без успех). Причина, по которой WindowInsetsController не будет работать, заключается в том, что мои устройства имеют более низкую версию, и другие способы могут не работать, потому что компилятор их не предлагает.

Joerg 17.05.2022 13:44

Вот конкретное предупреждение, которое я получаю в VS2022: Warning XA4211 AndroidManifest.xml //uses-sdk/@android:targetSdkVersion '25' is less than $(TargetFrameworkVersion) ''. Using API-31 for ACW compilation. Все поиски этих сообщений относятся к VS2019 или более ранней версии, а указанные там решения не относятся к VS2022...

Joerg 17.05.2022 15:02
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
3
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В MainActivity.cs:

using Android.Views;
...
public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        this.Window.DecorView.SystemUiVisibility = (StatusBarVisibility)
            (SystemUiFlags.ImmersiveSticky | SystemUiFlags.HideNavigation |
             SystemUiFlags.Fullscreen | SystemUiFlags.Immersive);
    }
}

Я не знаю, какие из этих флагов нужны, поэтому я установил их все.

Проверено на более новом устройстве. Но должно нормально работать на устройстве API-25.

SystemUiVisibility помечен как устаревший, но все еще работает.
Если вы установите для targetSdkVersion значение API-31, вы можете добавить if-test для использования WindowInsetsController, где это возможно. (Хотя похоже, что у вас есть конкретное устройство для запуска, поэтому это не имеет отношения к вашей ситуации.)

ПРИМЕЧАНИЕ. targetSdkVersion и TargetFrameworkVersion не обязательно должны быть API-25; хорошо, если они новее. Не уверен, как Мауи устанавливает TargetFrameworkVersion. Я думаю, что net6.0-android по умолчанию используется API-31. Вызывает предупреждение, которое вы видите.

Другие вопросы по теме