Ich versuche, eine Schaltfläche zu erstellen, mit der ich die Statusleiste auf meinem Tablet anzeigen oder ausblenden kann.
Ich habe den onCreate eingefügt
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
und in den Buttonsshow:
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
verbergen:
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
Irgendwelche Tipps/Tipps?
//bearbeiten
Ich habe mir diesen Hinweis hier angesehen: http://Android.serverbox.ch/?p=306 Und meinen Code folgendermaßen geändert:
private void hideStatusBar() throws IOException, InterruptedException {
Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 79 s16 com.Android.systemui"});
proc.waitFor();
}
private void showStatusBar() throws IOException, InterruptedException {
Process proc = Runtime.getRuntime().exec(new String[]{"am","startservice","-n","com.Android.systemui/.SystemUIService"});
proc.waitFor();
}
Wenn ich also auf meine Buttons klicke und die Methoden heißen, kann ich sehen, dass etwas passiert, weil die App einige Sekunden wartet ... Ich habe auch in LockCat nachgesehen und festgestellt, dass etwas passiert.
show: http://Pastebin.com/CidTRSTi hide: http://Pastebin.com/iPS6Kgbp
Haben Sie das Vollbild-Thema im Manifest festgelegt?
Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
Ich glaube nicht, dass Sie ohne dieses Bild in den Vollbildmodus gehen können.
Ich würde folgendes verwenden, um das Vollbild-Flag hinzuzufügen und zu entfernen:
// Hide status bar
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Show status bar
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Bei einigen Personen funktioniert das Anzeigen der Statusleiste durch Löschen von FLAG_FULLSCREEN möglicherweise nicht.
Hier ist die Lösung, die für mich funktioniert hat ( Dokumentation ) ( Flag Reference )
Statusleiste verstecken
// Hide Status Bar
if (Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else {
View decorView = getWindow().getDecorView();
// Hide Status Bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
Zeige Statusleiste
if (Build.VERSION.SDK_INT < 16) {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
else {
View decorView = getWindow().getDecorView();
// Show Status Bar.
int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
decorView.setSystemUiVisibility(uiOptions);
}
Für Kotlin-Nutzer
ZU ZEIGEN
activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
ZU AUSBLENDEN
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
wird für Kolin in Android verwendet, um die Statusleiste in Kolin auszublenden. Am Ende der Zeile muss kein Semikolon (;) verwendet werden
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
in Android mit Java Sprache für versteckte Statusleiste
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
bei dieser Methode wird mithilfe von SYSTEM_UI_FLAG_IMMERSIVE_STICKY der Vollbildmodus mit einem Fingertipp ohne Implementierung wiederhergestellt. Kopieren Sie diese Methode einfach weiter unten und rufen Sie sie an der gewünschten Stelle in Ihrer Aktivität auf. Weitere Details hier
private void hideSystemUI() {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//hide status bar
requestWindowFeature( Window.FEATURE_NO_TITLE );
getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN );
setContentView(R.layout.activity_main);
}
Referenz - https://developer.Android.com/training/system-ui/immersive.html
// This snippet shows the system bars. It does this by removing all the flags
// except for the ones that make the content appear under the system bars.
private void showSystemUI() {
mDecorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
fun Activity.setStatusBarVisibility(isVisible: Boolean) {
//see details https://developer.Android.com/training/system-ui/immersive
if (isVisible) {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
} else {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
}
wird in Android für Kolin verwendet Zum Ausblenden der Statusleiste in Kolin müssen Sie kein Semikolon (;) am Zeilenende verwenden
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
in Android mit Java für verborgene Statusleiste
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);