Tema a schermo intero per AppCompat


304

Vorrei sapere come posso applicare il tema a schermo intero (nessuna barra del titolo + nessuna barra delle azioni) a un'attività. Sto usando la libreria AppCompat dal pacchetto di supporto v7.

Ho provato ad applicare android:theme="@android:style/Theme.NoTitleBar.Fullscreen"alla mia attività specifica ma si è bloccato. Penso che sia perché il mio tema dell'applicazione è così.

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

Ho anche provato questo

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

che nasconde solo la barra del titolo ma non la barra delle azioni. La mia attuale soluzione è quella di nascondere la barra delle azioni con

getSupportActionBar().hide();

Risposte:


836

Quando usi Theme.AppCompat nella tua applicazione puoi usare FullScreenTheme aggiungendo il codice seguente agli stili.

<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>

e anche menzionare nel tuo file manifest.

<activity
   android:name=".activities.FullViewActivity"
   android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" 
/>

67
Lo stile principale dovrebbe essere "Theme.AppCompat.Light.NoActionBar"
Hover Ruan

3
In realtà, è sufficiente aggiungere questo al file xml di stile: <item name = "android: windowFullscreen"> true </item>. La visibilità della barra delle azioni (barra del titolo) può essere controllata separatamente utilizzando i metodi .hide / .show in fase di esecuzione.
Amin,

2
FEATURE_NO_TITLE non è stato onorato. Non so la differenza, ma alla fine ho cambiato la mia attività per estendere l'attività anziché AppCompatActivity e il mio stesso codice ha funzionato (per fortuna non ho bisogno di 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_FLAGHATION);
user888867

questo nasconde anche la barra di stato :(
Omama

3
Vorrei aggiungere hideNavigation()a onResume()-, senza che, la barra di navigazione era ancora visibile nella mia app (api 18+)
Antek

69

Sulla base della risposta di @nebyan, ho scoperto che la barra delle azioni non si sta ancora nascondendo.

Il seguente codice funziona per me:

<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>

e ovviamente non dimenticare di modificare il tuo AndroidManifestfile.

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>

@nebyan perché la tua soluzione non funziona e questa funziona per me? Qual è la ragione?
Ahmet,

1
non è necessario impostare <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>se il tema include.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 il precedente XML in style.xml, sarai in grado di nascondere il titolo e la barra delle azioni.


12

I problemi sorgono tra le versioni precedenti e successive di Android 4.0 (livello API 14).

da qui ho creato la mia soluzione.

@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();
    }
}

Scrivo questo codice nel metodo onResume () perché se esci dalla tua app e poi lo riapri, la barra delle azioni rimane attiva! (e quindi questo risolve il problema)

Spero sia stato utile ;)


Nota che se l'utente tira manualmente la barra di stato, non si nasconderà da sola. A peggiorare le cose, se viene visualizzata la tastiera virtuale, la barra di stato viene visualizzata automaticamente anche in questo caso, non verrà visualizzata nuovamente.
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();
}

5

Puoi seguire il passaggio seguente: -

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);
     }

Spero che ti possa aiutare ... Grazie !!


4

Dovrebbe essere 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>

Solo questa soluzione nasconde effettivamente la barra del titolo e la rende completamente a schermo intero. Dovrebbe essere contrassegnato come la soluzione corretta. Grazie!
Darko Maksimovic,

3

Per nascondere sia la barra di stato che la barra delle azioni e rendere la tua attività a schermo intero, usa il seguente codice nelle attività onResume() o nel onWindowFocusChanged()metodo:

@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);
}

Puoi trovare ulteriori informazioni nei seguenti link:

Nota: utilizzando le soluzioni XML fornite in questo thread ho potuto solo nascondere la barra di stato ma non la barra di navigazione.


1
Grazie, questo è l'unico che nasconde la barra di navigazione! Consiglio vivamente questa risposta.
Maharkus,


2

Questo tema funziona solo dopo l'API 21 (inclusa). E rendere trasparenti sia StatusBar che NavigationBar.

<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>

1

Per rimuovere la barra del titolo in AppCompat:

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

1

Puoi provare quanto segue :

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>

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>


1
Spiegare anche il codice, se fornito, aiuta a comprendere il codice e può aiutare a ottenere informazioni dettagliate su problemi futuri.
Lepidopteron,

0

solo questo ?

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

0

Semplicemente in questo ragazzo per il tuo stile:

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.