Hello,
I'm using the following code to set Immersive mode.
It works from Android 5 to 15, but don't work on Android 16.
Any suggestions?
Thank you
I'm using the following code to set Immersive mode.
B4X:
Sub Activity_WindowFocusChanged(HasFocus As Boolean)
If HasFocus Then
HideMenuBar
End If
End Sub
Sub HideMenuBar
Dim jo As JavaObject
jo.InitializeContext
' Dim NativeMe As JavaObject
' NativeMe.InitializeStatic("anywheresoftware.b4a.ImmersiveHelper")
Dim window As JavaObject = jo.RunMethodJO("getWindow", Null)
Dim decorView As JavaObject = window.RunMethodJO("getDecorView", Null)
NativeMe.RunMethod("consumeInsets", Array(decorView))
If SDKver >= 30 Then
' Android 11+ (including Android 16)
NativeMe.RunMethod("setDecorFitsSystemWindows", Array(window, False))
window.RunMethod("addFlags", Array(0x80000000)) ' FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
window.RunMethod("setNavigationBarColor", Array(0)) ' Transparent
Dim wic As JavaObject = NativeMe.RunMethodJO("getInsetsController", Array(window, decorView))
If wic.IsInitialized Then
wic.RunMethod("setSystemBarsBehavior", Array(2)) ' BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
Dim types As JavaObject = NativeMe.RunMethod("getSystemBarsType", Null)
wic.RunMethod("hide", Array(types))
decorView.RunMethod("setSystemUiVisibility", Array(5894)) ' HIDE_NAV + FULLSCREEN + IMMERSIVE_STICKY
End If
Else
' Android 5–10
Dim immersiveFlags As Int = 5894 ' SYSTEM_UI_FLAG_HIDE_NAVIGATION + SYSTEM_UI_FLAG_FULLSCREEN + SYSTEM_UI_FLAG_IMMERSIVE_STICKY
decorView.RunMethod("setSystemUiVisibility", Array(immersiveFlags))
End If
End Sub
#If Java
import android.view.Window;
import android.view.View;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.OnApplyWindowInsetsListener;
public static void setDecorFitsSystemWindows(Window window, boolean fits) {
WindowCompat.setDecorFitsSystemWindows(window, fits);
}
public static WindowInsetsControllerCompat getInsetsController(Window window, View decorView) {
return WindowCompat.getInsetsController(window, decorView);
}
public static int getSystemBarsType() {
return WindowInsetsCompat.Type.systemBars();
}
public static void consumeInsets(View view) {
ViewCompat.setOnApplyWindowInsetsListener(view, new OnApplyWindowInsetsListener() {
@Override
public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
return WindowInsetsCompat.CONSUMED;
}
});
}
#End If
It works from Android 5 to 15, but don't work on Android 16.
Any suggestions?
Thank you