videos ver studio puedo para pantalla optimizada modo inmersivo esta ejecutarse completa aplicacion android fullscreen

android - ver - Alternar modo de pantalla completa



pantalla completa apk (5)

Necesito un poco de ayuda para cambiar el modo de pantalla completa. Tengo una configuración en una pantalla de preferencias para ir a pantalla completa. En mi actividad principal onResume tengo:

if(mFullscreen == true) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } else { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); }

Pero esto no parece funcionar porque debe llamarse antes de setContentView ¿verdad?

... Pero también tengo requestWindowFeature(Window.FEATURE_NO_TITLE); antes de setContentView y le quita el título Y la barra de estado ... ¿Alguien puede ofrecer ayuda?

--- Editar --- Ok, tuve un error que estaba causando que esto no funcionara. Así que en realidad lo hace. Ahora, solo necesito saber cómo cambiar la barra de título.


Desde Jellybean (4.1) hay un nuevo método que no depende del WindowManager. En su lugar, use setSystemUiVisibility fuera de la ventana, esto le brinda un control más granular sobre las barras del sistema que mediante los indicadores de WindowManager. Así es como habilitas la pantalla completa:

if (Build.VERSION.SDK_INT < 16) { //ye olde method getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { // Jellybean and up, new hotness View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide(); }

Y así es como se revierte el código anterior:

if (Build.VERSION.SDK_INT < 16) { //ye olde method getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { // Jellybean and up, new hotness View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.show(); }


Hay una implementación de método de pantalla completa más corta:

private void toggleFullscreen() { WindowManager.LayoutParams attrs = getWindow().getAttributes(); attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setAttributes(attrs); }

Utiliza la lógica XOR a nivel de bits para alternar FLAG_FULLSCREEN .


Mi solución combina respuestas de:

Agregué estos métodos a mi actividad. Para alternar la pantalla completa, use setFullScreen(!isFullScreen()) .

public boolean isFullScreen() { return (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0; } @SuppressLint("NewApi") public void setFullScreen(boolean full) { if (full == isFullScreen()) { return; } Window window = getWindow(); if (full) { window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } if (Build.VERSION.SDK_INT >= 11) { if (full) { getActionBar().hide(); } else { getActionBar().show(); } } }

En mi caso, quería un botón de menú para hacer el cambio. El problema: en un dispositivo sin un botón de menú de hardware, al ocultar la barra de acción también se oculta el interruptor para volver a pantalla completa. Entonces, agregué algo de lógica adicional para que solo oculte la barra de acción si el dispositivo tiene un botón de menú de hardware. Tenga en cuenta que los dispositivos que ejecutan SDK 11-13 no tenían uno.

if (Build.VERSION.SDK_INT >= 14 && ViewConfiguration.get(this).hasPermanentMenuKey()))) { if (full) { getActionBar().hide(); } else { getActionBar().show(); } }

Los dispositivos más antiguos (que ejecutan Gingerbread o versiones anteriores) tienen una Barra de título en lugar de una Barra de acción. El siguiente código lo ocultará, pero tenga en cuenta que la Barra de título no se puede mostrar / ocultar una vez que la actividad haya comenzado. Incluí un mensaje para el usuario en mi menú de ayuda que indica que los cambios a pantalla completa pueden no surtir efecto en los dispositivos más antiguos hasta que se reinicie la aplicación / actividad (lo cual, por supuesto, supone que persistirá su selección y ejecutará este código solo si lo desean). pantalla completa).

// call before setContentView() if (Build.VERSION.SDK_INT < 11) { requestWindowFeature(Window.FEATURE_NO_TITLE); }


/** * toggles fullscreen mode * <br/> * REQUIRE: android:configChanges="orientation|screenSize" * <pre> * sample: * private boolean fullscreen; * ................ * Activity activity = (Activity)context; * toggleFullscreen(activity, !fullscreen); * fullscreen = !fullscreen; * </pre> */ private void toggleFullscreen(Activity activity, boolean fullscreen) { if (Build.VERSION.SDK_INT >= 11) { // The UI options currently enabled are represented by a bitfield. // getSystemUiVisibility() gives us that bitfield. int uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); int newUiOptions = uiOptions; boolean isImmersiveModeEnabled = ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions); if (isImmersiveModeEnabled) { Log.i(context.getPackageName(), "Turning immersive mode mode off. "); } else { Log.i(context.getPackageName(), "Turning immersive mode mode on."); } // Navigation bar hiding: Backwards compatible to ICS. if (Build.VERSION.SDK_INT >= 14) { newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; } // Status bar hiding: Backwards compatible to Jellybean if (Build.VERSION.SDK_INT >= 16) { newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN; } // Immersive mode: Backward compatible to KitKat. // Note that this flag doesn''t do anything by itself, it only augments the behavior // of HIDE_NAVIGATION and FLAG_FULLSCREEN. For the purposes of this sample // all three flags are being toggled together. // Note that there are two immersive mode UI flags, one of which is referred to as "sticky". // Sticky immersive mode differs in that it makes the navigation and status bars // semi-transparent, and the UI flag does not get cleared when the user interacts with // the screen. if (Build.VERSION.SDK_INT >= 18) { newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } activity.getWindow().getDecorView().setSystemUiVisibility(newUiOptions); } else { // for android pre 11 WindowManager.LayoutParams attrs = activity.getWindow().getAttributes(); if (fullscreen) { attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; } else { attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; } activity.getWindow().setAttributes(attrs); } try { // hide actionbar if (activity instanceof ActionBarActivity) { if (fullscreen) ((ActionBarActivity) activity).getSupportActionBar().hide(); else ((ActionBarActivity) activity).getSupportActionBar().show(); } else if (Build.VERSION.SDK_INT >= 11) { if (fullscreen) activity.getActionBar().hide(); else activity.getActionBar().show(); } } catch (Exception e) { e.printStackTrace(); } // set landscape // if(fullscreen) activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); // else activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); }

Mi código funciona bien con Android 2.3 y 4.4.2


private void setFullscreen(boolean fullscreen) { WindowManager.LayoutParams attrs = getWindow().getAttributes(); if (fullscreen) { attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; } else { attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN; } getWindow().setAttributes(attrs); }