Vollbild-Theme für AppCompat


304

Ich möchte wissen, wie ich ein Vollbild-Thema (keine Titelleiste + keine Aktionsleiste) auf eine Aktivität anwenden kann. Ich verwende die AppCompat-Bibliothek aus dem Support Package v7.

Ich habe versucht, android:theme="@android:style/Theme.NoTitleBar.Fullscreen"mich auf meine spezifische Aktivität zu bewerben , aber sie ist abgestürzt. Ich denke, das liegt daran, dass mein Anwendungsthema so ist.

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

Ich habe das auch versucht

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

Hier wird nur die Titelleiste ausgeblendet, nicht jedoch die Aktionsleiste. Meine aktuelle Problemumgehung besteht darin, die Aktionsleiste mit auszublenden

getSupportActionBar().hide();

Antworten:


836

Wenn Sie Theme.AppCompat in Ihrer Anwendung verwenden, können Sie FullScreenTheme verwenden, indem Sie den folgenden Code zu den Stilen hinzufügen.

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

und auch in Ihrer Manifestdatei erwähnen.

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

67
Der übergeordnete Stil sollte "Theme.AppCompat.Light.NoActionBar" sein
Hover Ruan

3
Eigentlich reicht es aus, dies der XML-Datei im Stil hinzuzufügen: <item name = "android: windowFullscreen"> true </ item>. Die Sichtbarkeit der Aktionsleiste (Titelleiste) kann zur Laufzeit mithilfe der Methoden .hide / .show separat gesteuert werden.
Amin

2
FEATURE_NO_TITLE wurde nicht geehrt. Keine Ahnung, aber ich habe endlich meine Aktivität geändert, um die Aktivität anstelle von AppCompatActivity zu erweitern, und mein Code hat funktioniert (zum Glück brauche ich AppCompat nicht): 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_FL__YY_UT;
Benutzer888867

Dies verbirgt auch Statusleiste :(
Omama

3
Ich möchte hinzufügen , hideNavigation()in onResume()- ohne dass, war der Navigationsleiste noch sichtbar in meiner app (api 18+)
Antek

69

Aufgrund der Antwort von @nebyan stellte ich fest, dass sich die Aktionsleiste immer noch nicht versteckt.

Der folgende Code funktioniert für mich:

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

und natürlich nicht vergessen, Ihre AndroidManifestDatei zu bearbeiten .

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

@nebyan warum funktioniert deine lösung nicht und diese funktioniert bei mir? Was ist der Grund?
ahmet

1
Keine Notwendigkeit <item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>.NoActionBar
festzulegen

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

Mit der obigen XML-Datei in style.xml können Sie den Titel sowie die Aktionsleiste ausblenden.


12

Probleme treten vor und nach Versionen von Android 4.0 (API-Level 14) auf.

Von hier aus habe ich meine eigene Lösung erstellt.

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

Ich schreibe diesen Code in der onResume () -Methode, denn wenn Sie Ihre App beenden und sie dann wieder öffnen, bleibt die Aktionsleiste aktiv! (und so das Problem beheben)

Ich hoffe es war hilfreich;)


Beachten Sie, dass der Benutzer die Statusleiste nicht manuell wiederherstellt, wenn er sie manuell zieht. Um es noch schlimmer zu machen, wenn die Softtastatur angezeigt wird, wird die Statusleiste automatisch ebenfalls angezeigt und nicht erneut angezeigt.
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

Sie können den folgenden Schritt ausführen: -

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

Ich hoffe es wird helfen .. Danke !!


4

Es sollte parent = "@ style / Theme.AppCompat.Light.NoActionBar" sein.

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

Nur diese Lösung verbirgt die Titelleiste und macht sie vollständig im Vollbildmodus. Sollte als die richtige Lösung markiert werden. Vielen Dank!
Darko Maksimovic

3

Verwenden Sie den folgenden Code in der Aktivität onResume()oder onWindowFocusChanged()Methode Ihrer Aktivität, um sowohl die Statusleiste als auch die Aktionsleiste auszublenden und Ihre Aktivität im Vollbildmodus anzuzeigen :

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

Weitere Informationen finden Sie unter folgenden Links:

Hinweis: Mit den in diesem Thread bereitgestellten XML-Lösungen konnte ich nur die Statusleiste, nicht aber die Navigationsleiste ausblenden.


1
Vielen Dank, dies ist der einzige, der die Navigationsleiste versteckt! Ich kann diese Antwort nur empfehlen.
Maharkus


2

Dieses Thema funktioniert nur nach API 21 (enthalten). Und machen Sie sowohl die Statusleiste als auch die Navigationsleiste transparent.

<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

So entfernen Sie die Titelleiste in AppCompat:

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

1

Sie können Folgendes versuchen :

<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
Bitte erläutern Sie auch den Code. Wenn Sie ihn bereitstellen, hilft dies beim Verständnis Ihres Codes und kann dazu beitragen, Erkenntnisse für zukünftige Probleme zu gewinnen.
Lepidopteron

0

nur das ?

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

0

Einfach bei diesen Jungs zu deinem Style:

<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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.