studio para pantalla grabar completa app android android-activity fullscreen android-fullscreen

para - ¿Actividad de pantalla completa en Android?



splash android studio (25)

¿Cómo hago una actividad de pantalla completa? Quiero decir sin la barra de notificaciones. ¿Algunas ideas?


Aquí hay un código de ejemplo. Puede activar / desactivar las banderas para ocultar / mostrar partes específicas.

public static void hideSystemUI(Activity activity) { View decorView = activity.getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE); }

A continuación, se restablece al estado predeterminado :

public static void showSystemUI(Activity activity) { View decorView = activity.getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); }

Puede llamar a las funciones anteriores desde su onCreate :

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.course_activity); UiUtils.hideSystemUI(this); }


Con kotlin esta es la forma en que lo hice:

class LoginActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_FULLSCREEN } }

Modo inmersivo

El modo inmersivo está destinado a aplicaciones en las que el usuario interactúa en gran medida con la pantalla. Algunos ejemplos son los juegos, ver imágenes en una galería o leer contenido paginado, como un libro o diapositivas en una presentación. Para esto, solo agrega estas líneas:

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

Pegajosa inmersiva

En el modo inmersivo normal, cada vez que un usuario desliza desde un borde, el sistema se encarga de revelar las barras del sistema: su aplicación ni siquiera se dará cuenta de que ocurrió el gesto. Por lo tanto, si el usuario realmente necesita deslizar desde el borde de la pantalla como parte de la experiencia de la aplicación principal, como cuando juega un juego que requiere mucho deslizar o usa una aplicación de dibujo, debe habilitar el modo inmersivo "pegajoso" .

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

Para más información: Habilitar el modo de pantalla completa.

En caso de que esté usando el teclado, a veces sucede que StatusBar muestra cuando aparece el teclado. En ese caso usualmente agrego esto a mi estilo xml.

styles.xml

<style name="FullScreen" parent="AppTheme"> <item name="android:windowFullscreen">true</item> </style>

Y también esta línea a mi manifiesto.

<activity android:name=".ui.login.LoginActivity" android:label="@string/title_activity_login" android:theme="@style/FullScreen">


Dentro de styles.xml ...

<!-- No action bar --> <style name="NoActonBar" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Theme customization. --> <item name="colorPrimary">#000</item> <item name="colorPrimaryDark">#444</item> <item name="colorAccent">#999</item> <item name="android:windowFullscreen">true</item> </style>

Esto funcionó para mí. Espero que te ayude.


Después de mucho tiempo sin éxito, vine con mi propia solución, que es similar a la de otro desarrollador. Entonces, si alguien la necesita, lo es. Mi problema fue que la barra de navegación del sistema no se ocultaba después de llamar. También en mi caso necesitaba paisaje, así que en caso de comentar esa línea y todo eso. En primer lugar crea estilo

<style name="FullscreenTheme" parent="AppTheme"> <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item> <item name="android:windowActionBarOverlay">true</item> <item name="android:windowBackground">@null</item> <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item> <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item> </style>

Este es mi archivo manifiesto

<activity android:name=".Splash" android:screenOrientation="landscape" android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize" android:label="@string/app_name" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize" android:screenOrientation="landscape" android:label="@string/app_name" android:theme="@style/FullscreenTheme"> </activity>

Esta es mi actividad spalsh

public class Splash extends Activity { /** Duration of wait **/ private final int SPLASH_DISPLAY_LENGTH = 2000; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.splash_creen); /* New Handler to start the Menu-Activity * and close this Splash-Screen after some seconds.*/ new Handler().postDelayed(new Runnable(){ @Override public void run() { /* Create an Intent that will start the Menu-Activity. */ Intent mainIntent = new Intent(Splash.this,MainActivity.class); Splash.this.startActivity(mainIntent); Splash.this.finish(); } }, SPLASH_DISPLAY_LENGTH); }

}

Y esta es mi principal actividad de pantalla completa. onSystemUiVisibilityChange este método es muy importante, de lo contrario, la barra de navegación principal de Android después de la llamada permanecerá y no desaparecerá más. Problema realmente irritante, pero esta función resuelve ese problema.

La clase pública MainActivity extiende AppCompatActivity {

private View mContentView; @Override public void onResume(){ super.onResume(); mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fullscreen2); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.hide(); } mContentView = findViewById(R.id.fullscreen_content_text); mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); View decorView = getWindow().getDecorView(); decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { System.out.println("print"); if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } else { mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } } }); }

}

Este es mi diseño de pantalla de bienvenida:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="@android:color/white" android:src="@drawable/splash" android:layout_gravity="center"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, splash"/> </LinearLayout> This is my fullscreen layout <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0099cc" > <TextView android:id="@+id/fullscreen_content_text" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:keepScreenOn="true" android:text="@string/dummy_content2" android:textColor="#33b5e5" android:textSize="50sp" android:textStyle="bold" /> </FrameLayout>

Espero que esto ayude


En el archivo AndroidManifest.xml :

<activity android:name=".Launch" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <!-- This line is important --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

O en código Java :

protected void onCreate(Bundle savedInstanceState){ requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); }


Funcionó para mí.

if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); }



Intenta esto con appcompat desde style.xml . Puede soportar con todas las plataformas.

<!-- Application theme. --> <style name="AppTheme.FullScreen" parent="AppTheme"> <item name="android:windowFullscreen">true</item> </style> <!-- Application theme. --> <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />


Para aquellos que usan AppCompact ... style.xml

<style name="Xlogo" parent="Theme.AppCompat.DayNight.NoActionBar"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item>

Luego pon el nombre en tu manifiesto ...


Primero debes configurar tu tema de aplicación con "NoActionBar" como abajo

<!-- Application theme. --> <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

Luego agrega estas líneas en tu actividad de pantalla completa.

public class MainActiviy extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); } }

Ocultará la barra de acción / barra de herramientas y también la barra de estado en su actividad de pantalla completa


Puedes hacerlo programáticamente:

public class ActivityName extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // remove title requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); } }

O puede hacerlo a través de su archivo AndroidManifest.xml :

<activity android:name=".ActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

Editar:

Si está utilizando AppCompatActivity, entonces necesita configurar el tema como se muestra a continuación

<activity android:name=".ActivityName" android:label="@string/app_name" android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>


Quería usar mi propio tema en lugar de usar @android: style / Theme.NoTitleBar.Fullscreen. Pero no funcionó como lo mencionaron algunos post aquí, así que hice algunos ajustes para resolverlo.

En AndroidManifest.xml:

<activity android:name=".ui.activity.MyActivity" android:theme="@style/MyTheme"> </activity>

En styles.xml:

<style name="MyTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="android:windowFullscreen">true</item> </style>

Nota: en mi caso tuve que usar name="windowActionBar" lugar de name="android:windowActionBar" antes de que funcionara correctamente. Así que solo utilicé ambos para asegurarme de que en el caso de que necesite portar a una nueva versión de Android más adelante.


SUGERENCIA: ¡Usar getWindow (). SetLayout () puede arruinar tu pantalla completa! Note que la documentación para este método dice:

Establezca los parámetros de diseño de ancho y alto de la ventana ... puede cambiarlos a ... un valor absoluto para crear una ventana que no esté en pantalla completa.

http://developer.android.com/reference/android/view/Window.html#setLayout%28int,%20int%29

Para mis propósitos, encontré que tenía que usar setLayout con parámetros absolutos para cambiar el tamaño de la ventana de pantalla completa correctamente. La mayoría de las veces, esto funcionó bien. Fue llamado por un evento onConfigurationChanged (). Sin embargo, hubo un hipo. Si el usuario salía de la aplicación, cambiaba la orientación y volvía a ingresar, llevaría a disparar mi código, que incluía setLayout (). Durante esta ventana de tiempo de reentrada, se haría que mi barra de estado (que estaba oculta por el manifiesto) reapareciera, ¡pero en cualquier otro momento setLayout () no causaría esto! La solución fue agregar una llamada setLayout () adicional después de la que tiene los valores reales como:

public static void setSize( final int width, final int height ){ //DO SOME OTHER STUFF... instance_.getWindow().setLayout( width, height ); // Prevent status bar re-appearance Handler delay = new Handler(); delay.postDelayed( new Runnable(){ public void run() { instance_.getWindow().setLayout( WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.FILL_PARENT ); }}, FILL_PARENT_ON_RESIZE_DELAY_MILLIS ); }

La ventana se redimensionó correctamente y la barra de estado no volvió a aparecer independientemente del evento que lo provocó.


Si está utilizando AppCompat y ActionBarActivity, entonces use este

getSupportActionBar().hide();


Si no desea utilizar el tema @android:style/Theme.NoTitleBar.Fullscreen porque ya está usando un tema propio, puede usar android:windowFullscreen .

En AndroidManifest.xml:

<activity android:name=".ui.activity.MyActivity" android:theme="@style/MyTheme"> </activity>

En styles.xml:

<style name="MyTheme" parent="your parent theme"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> </style>


Simplemente pegue este código en el método onCreate()

requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);


Ten cuidado con

requestWindowFeature(Window.FEATURE_NO_TITLE);

Si está utilizando algún método para configurar la barra de acción como sigue:

getSupportActionBar().setHomeButtonEnabled(true);

Esto causará una excepción de puntero nulo.


Usar Android Studio (la versión actual es 2.2.2 en este momento) es muy fácil de agregar una actividad de pantalla completa.

Vea los pasos:

  1. Haga clic derecho en su paquete principal de java> Seleccione "Nuevo"> Seleccione "Actividad"> Luego, haga clic en "Actividad de pantalla completa".

  1. Personalice la actividad ("Nombre de la actividad", "Nombre del diseño", etc.) y haga clic en "finalizar".

¡Hecho!

Ahora tiene una actividad de pantalla completa fácil (vea la clase de java y el diseño de la actividad para saber cómo funcionan las cosas).


gracias por responder @Cristian me estaba equivocando

android.util.AndroidRuntimeException: se debe llamar a requestFeature () antes de agregar contenido

Resolví esto usando

@Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_login); ----- ----- }


mostrar Full Immersive:

private void askForFullScreen() { getActivity().getWindow().getDecorView().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 // hide nav bar | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE); }

salir del modo inmersivo completo:

private void moveOutOfFullScreen() { getActivity().getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); }


https://developer.android.com/training/system-ui/immersive.html

Actividad :

@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { 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); } }

AndroidManifests:

<activity android:name=".LoginActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/title_activity_login" android:theme="@style/FullscreenTheme" ></activity>


AndroidManifest.xml

<activity ... android:theme="@style/FullScreenTheme" > </activity>

I. El tema principal de tu aplicación es Theme.AppCompat.Light.DarkActionBar

Para ocultar ActionBar / StatusBar
style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... </style> <style name="FullScreenTheme" parent="AppTheme"> <!--this property will help hide ActionBar--> <item name="windowNoTitle">true</item> <!--currently, I don''t know why we need this property since use windowNoTitle only already help hide actionbar. I use it because it is used inside Theme.AppCompat.Light.NoActionBar (you can check Theme.AppCompat.Light.NoActionBar code). I think there are some missing case that I don''t know--> <item name="windowActionBar">false</item> <!--this property is used for hiding StatusBar--> <item name="android:windowFullscreen">true</item> </style>

Para ocultar la barra de navegación del sistema.

public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); setContentView(R.layout.activity_main) ... } }

II. El tema principal de su aplicación es Theme.AppCompat.Light.NoActionBar

Para ocultar ActionBar / StatusBar
style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ... </style> <style name="FullScreenTheme" parent="AppTheme"> <!--don''t need any config for hide ActionBar because our apptheme is NoActionBar--> <!--this property is use for hide StatusBar--> <item name="android:windowFullscreen">true</item> // </style>

Para ocultar la barra de navegación del sistema.

Similar como Theme.AppCompat.Light.DarkActionBar .

Demo
Espero te ayude


@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); adjustFullScreen(newConfig); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { adjustFullScreen(getResources().getConfiguration()); } } private void adjustFullScreen(Configuration config) { final View decorView = getWindow().getDecorView(); if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { 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); } else { decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE); } }


protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_splash_screen); getSupportActionBar().hide(); }


getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);