Tema de pantalla completa para AppCompat

304

Me gustaría saber cómo puedo aplicar el tema de pantalla completa (sin barra de título + sin barra de acción) a una actividad. Estoy usando la biblioteca AppCompat del paquete de soporte v7.

Intenté aplicar android:theme="@android:style/Theme.NoTitleBar.Fullscreen"a mi actividad específica, pero falló. Creo que es porque el tema de mi aplicación es así.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

También he intentado esto

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

que solo oculta la barra de título pero no la barra de acción. Mi solución actual es que ocultar la barra de acción con

getSupportActionBar().hide();
Ye Lin Aung
fuente

Respuestas:

836

Cuando usa Theme.AppCompat en su aplicación, puede usar FullScreenTheme agregando el siguiente código a los estilos.

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

y también mencione en su archivo de manifiesto.

<activity
   android:name=".activities.FullViewActivity"
   android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" 
/>
nebyan
fuente
67
El estilo principal debe ser "Theme.AppCompat.Light.NoActionBar"
Hover Ruan
3
En realidad, es suficiente agregar esto al archivo xml de estilo: <item name = "android: windowFullscreen"> true </item>. La visibilidad de la barra de acción (barra de título) se puede controlar por separado utilizando los métodos .hide / .show en tiempo de ejecución.
Amin
2
FEATURE_NO_TITLE no fue honrado. No sé la diferencia, pero finalmente cambié mi actividad para extender la actividad en lugar de AppCompatActivity y mi mismo código funcionó (afortunadamente no necesito AppCompat): this.requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG__VAG__VAGO_
user888867
esto también oculta la barra de estado :(
Omama
3
Yo añadiría hideNavigation()en onResume()- sin eso, la barra de navegación todavía era visible en mi aplicación (API 18+)
Antek
69

Según la respuesta de @nebyan, descubrí que la barra de acción todavía no se oculta.

El siguiente código funciona para mí:

<style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

y, por supuesto, no olvidó editar su AndroidManifestarchivo.

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>
Hover Ruan
fuente
@nebyan, ¿por qué su solución no funciona y esta me funciona? ¿Cuál es la razón?
ahmet
1
no es necesario configurar <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>si su tema incluye.NoActionBar
user924
19
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

Usando el xml anterior en style.xml, podrá ocultar el título y la barra de acción.

Dharmendra Pratap Singh
fuente
12

Surgen problemas entre las versiones anteriores y posteriores de Android 4.0 (API nivel 14).

Desde aquí creé mi propia solución.

@SuppressLint("NewApi")
@Override
protected void onResume()
{
    super.onResume();

    if (Build.VERSION.SDK_INT < 16)
    {
        // Hide the status bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Hide the action bar
        getSupportActionBar().hide();
    }
    else
    {
        // Hide the status bar
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        / Hide the action bar
        getActionBar().hide();
    }
}

Escribo este código en el método onResume () porque si sales de tu aplicación y luego la vuelves a abrir, ¡la barra de acción permanece activa! (y esto soluciona el problema)

Espero que haya sido de ayuda ;)

KrhashisM
fuente
Tenga en cuenta que si el usuario extrae manualmente la barra de estado, no se volverá a ocultar. Para empeorar las cosas, si se muestra un teclado virtual, la barra de estado también se muestra automáticamente y, una vez más, no se volverá a ocultar.
Hendra Anggrian
7
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to remove "information bar" above the action bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove the action bar (title bar)
    getSupportActionBar().hide();
}
Shuyan Ji
fuente
5

Puedes seguir el siguiente paso: -

AndoridMenifest.xml

<activity
            android:name=".ui.FullImageActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape"
            android:theme="@style/DialogTheme">
        </activity>

Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>

   <!-- No backgrounds, titles or window float -->
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    setContentView(R.layout.image_view);
     }

Espero que ayude ... ¡Gracias!

jagdish
fuente
4

Debe ser parent = "@ style / Theme.AppCompat.Light.NoActionBar"

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" 
parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>
vntstudy
fuente
Solo esta solución en realidad oculta la barra de título y la hace completamente a pantalla completa. Debe marcarse como la solución correcta. ¡Gracias!
Darko Maksimovic
3

Para ocultar la barra de estado y la barra de acción y hacer que su actividad sea en pantalla completa, use el siguiente código en su actividad onResume()o onWindowFocusChanged()método:

@Override
protected void onResume() {
    super.onResume();
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | 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);
}

Puede encontrar más información en los siguientes enlaces:

Nota: Al usar las soluciones xml proporcionadas en este hilo, solo pude ocultar la barra de estado pero no la barra de navegación.

Darush
fuente
1
¡Gracias, este es el único que oculta la barra de navegación! Recomiendo esta respuesta.
Maharkus
2
requestWindowFeature(Window.FEATURE_NO_TITLE);
prashantwosti
fuente
2

Este tema solo funciona después de API 21 (incluido). Y haga que tanto la barra de estado como la barra de navegación sean transparentes.

<style name="TransparentAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:navigationBarColor">@android:color/transparent</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
</style>
DysaniazzZ
fuente
1

Para eliminar la barra de título en AppCompat:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }
Andoctorey
fuente
1

Puedes probar lo siguiente :

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>
Sumit Shukla
fuente
0
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>

Matt Barrera
fuente
1
También explique el código, si lo proporciona, ayuda a comprender su código y puede ayudar a obtener información para futuros problemas.
Lepidopteron
0

sólo esta ?

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="android:windowFullscreen">true</item>
</style>
Xan
fuente
0

Simplemente en esto chicos a tu estilo:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item> </style>
Reza Hamzehei
fuente