setOnSystemUiVisibilityChangeListener仅适用于隐藏导航栏

时间:2017-06-25 19:49:55

标签: android navigationbar android-navigation-bar

我想隐藏Android应用程序中的导航栏。我写了以下课程:

import android.view.View;

public class NavigationUtils {
    private NavigationUtils() {
    }

    public static void hideNavigation(View decorView) {
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

当我在onResume()方法中调用此方法时,导航栏将被隐藏。另外,在主要活动onCreate()方法中,我使用以下代码:

    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener
            (new View.OnSystemUiVisibilityChangeListener() {
                 @Override
                 public void onSystemUiVisibilityChange(int visibility) {
                     if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                         NavigationUtils.hideNavigation(getWindow().getDecorView());
                     }
                 }
             }
            );

当我点击EditText时,软键盘和导航栏都会打开。使用上面的代码,当软键盘关闭时,导航栏再次被隐藏。这在主要活动中很有效。

现在我已经从主要活动开始了另一项活动,我在上面的onCreate()方法中添加了相同的代码。

但是现在当我在新活动中退出软键盘(编辑EditText之后)后,导航栏不再隐藏。

我该怎么办?

编辑:两个活动的清单中的条目如下:

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation"
        android:screenOrientation="landscape">
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".SensorReadingsActivity"
        android:screenOrientation="landscape" />

0 个答案:

没有答案