Pertanyaan Bilah Status muncul ketika keyboard lunak muncul tetapi tidak disembunyikan saat keyboard lunak menghilang saat dalam Mode Immersive


Awalnya saya mengatur Aktivitas saya untuk berada dalam Mode Immersive dengan kode berikut:

View decorView = getWindow().getDecorView();
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);

Semuanya berfungsi dengan baik sampai pengguna mengklik EditText dan keyboard lunak muncul. Ini menyebabkan Status Bar tetap di atas dan tidak pernah bersembunyi lagi bahkan setelah keyboard lunak menghilang. Anehnya, saya hanya menemukan masalah ini pada ponsel LG / Samsung, ponsel Sony tidak memiliki masalah dengan ini. Ada yang tahu tentang ini?


12
2018-03-04 08:25


asal


Jawaban:


Gunakan mode imersif seperti ini.

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        immersiveMode();
        getWindow().getDecorView().setOnSystemUiVisibilityChangeListener
            (new View.OnSystemUiVisibilityChangeListener() {
                @Override
                public void onSystemUiVisibilityChange(int visibility) {
                    immersiveMode();
                }
            });
    }

Berikut adalah fungsi mode immersive Anda.

public void immersiveMode() {
        final View decorView = getWindow().getDecorView();
        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);
              }

Juga panggil immersiveMode () di OnResume (); Sekarang status bar akan menghilang saat papan kunci lunak Anda menghilang.


6
2018-06-07 06:12



Inilah solusi saya untuk ini; Pertama saya memeriksa apakah keyboard lunak muncul atau tidak:

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            Rect r = new Rect();
            getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
            int screenHeight = getWindow().getDecorView().getRootView().getHeight();

            int keypadHeight = screenHeight - r.bottom;

            //Log.d(TAG, "keypadHeight = " + keypadHeight);

            if (keypadHeight > screenHeight * 0.15) { 
                 //Keyboard is opened
                 hideNavBar();
            }
            else {
                // keyboard is closed
            }
        }
    });

Dan saya memiliki metode hideNavBar () yang dipicu saat keyboard lunak muncul.

private void hideNavBar() {
if (Build.VERSION.SDK_INT >= 19) {
    View v = getWindow().getDecorView();
    v.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);
}

}

Ini memecahkan masalah mendapatkan bilah navigasi saat ada Edittext yang akan diketik.


0
2018-01-11 08:14