Обнаружение мягкой навигационной панели на Android и скрытие навигационной панели - PullRequest
0 голосов
/ 04 марта 2020

Теперь, прежде чем кто-либо пометит вопрос как дубликат, внимательно прочитайте вопрос. Я перепробовал каждый текущий ответ по переполнению стека.

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

Теперь,

1) Я видел ответ, где люди проверяют максимальный размер экрана, видят, какое приложение / действие отображается, а затем, в зависимости от результата, решают, есть ли мягкая навигационная панель. , Это не будет надежно для устройств с надрезом.

2) Мне не интересно знать, есть ли аппаратная панель навигации или нет. Soft Nav Bar является обязательным, потому что:

a. В моем настоящем устройстве нет аппаратных навигационных панелей и программной навигационной панели. Несколько телефонов в настоящее время используют жесты для навигации.

b. Но в моем эмуляторе есть навигационная панель. Есть мягкие навигационные панели.

Чтобы скрыть их, я использую этот код:

int uiOptionsForDevicesWithoutNavBar = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        |  View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptionsForDevicesWithoutNavBar);

Теперь это работает как шарм. Waalaa, Nav Бары скрыты. Но тут возникает проблема с моим реальным телефоном. Он использует жесты. При моем первом пролистывании «Назад» появляется панель уведомлений, а затем при следующем немедленном пролистывании «Назад» происходит необходимое обратное действие.

Но если я сделаю это:

int uiOptionsForDevicesWithoutNavBar = View.SYSTEM_UI_FLAG_FULLSCREEN
        |  View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptionsForDevicesWithoutNavBar);

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

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

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

Также, если есть лучший способ сделать это, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 01 апреля 2020
public boolean hasNavigationBar(Resources resources) {
        int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
        return id > 0 && resources.getBoolean(id);
    }

Этот метод будет считывать из системы Android значение config_showNavigationBar boolean. Многие производители используют это значение при скрытии или отображении панели навигации, как Samsung.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...