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();
Ye Lin Aung
quelle

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" 
/>
Nebyan
quelle
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" 
/>
Hover Ruan
quelle
@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.

Dharmendra Pratap Singh
quelle
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;)

KrhashisM
quelle
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();
}
Shuyan Ji
quelle
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 !!

jagdisch
quelle
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>
vntstudy
quelle
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.

Darush
quelle
1
Vielen Dank, dies ist der einzige, der die Navigationsleiste versteckt! Ich kann diese Antwort nur empfehlen.
Maharkus
2
requestWindowFeature(Window.FEATURE_NO_TITLE);
prashantwosti
quelle
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>
DysaniazzZ
quelle
1

So entfernen Sie die Titelleiste in AppCompat:

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

Sie können Folgendes versuchen :

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowFullscreen">true</item>
</style>
Sumit Shukla
quelle
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
quelle
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>
Xan
quelle
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>
Reza Hamzehei
quelle