Прагматично определить наличие мягкой панели навигации в устройстве MIUI / Xiomi? - PullRequest
0 голосов
/ 16 марта 2019

Этот вопрос относится к проблеме с устройствами Xiomi с MIUI поверх него.

Как выбрать полноэкранный режим (Жест) или выбрана кнопка навигации (мягкая навигация)?

Я пробовал несколько решений, но они работают на других устройствах, но не работают на Xiomi или MIUI.

Я пробовал это решение, доступное на SO, поэтому, если у вас есть, предоставьте другое..

1

public boolean hasNavBar (Resources resources) 
{
    int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
    return id > 0 && resources.getBoolean(id);
}

2

boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME);

if (hasBackKey && hasHomeKey) {
    // no navigation bar, unless it is enabled in the settings
} else {
    // 99% sure there's a navigation bar
}

3

View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
        (new View.OnSystemUiVisibilityChangeListener() {
            @Override
            public void onSystemUiVisibilityChange(int visibility) {
                if ((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) {
                    // TODO: The navigation bar is visible. Make any desired
                    // adjustments to your UI, such as showing the action bar or
                    // other navigational controls.
                } else {
                    // TODO: The navigation bar is NOT visible. Make any desired
                    // adjustments to your UI, such as hiding the action bar or
                    // other navigational controls.
                }
            }
        });

Любое представление о том, как узнать, что панель навигациив настоящее время виден или нет?

Я также пытался вычислить реальную ширину и доступную ширину, похоже, MIUI всегда возвращает зарезервированное с навигационной панели.

Спасибо.

1 Ответ

1 голос
/ 25 марта 2019

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

 <style name="Theme" parent="Theme.AppCompat.Light.NoActionBar">
         <item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">false</item>
         <item name="android:windowTranslucentStatus">true</item>
     </style>

и добавить следующую строку в упражнении:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }

Это привело к тому, что вы перестали перекрывать макет из-за плавной навигации по входу.

...