Android: So verstecken Sie ActionBar bei bestimmten Aktivitäten


93

Ich habe eine einfache Demo-Anwendung mit einem Begrüßungsbildschirm, einer Karte und einigen regulären Bildschirmen entwickelt.

Ich habe oben eine Aktionsleiste, die ein Logo enthält. Auf meinem Handy (Galaxy s1 I9000 V2.3) sieht alles gut aus, aber wenn ich es auf Galaxy s2 v4 teste, wird die Aktionsleiste auch im Begrüßungsbildschirm und auf dem Kartenbildschirm angezeigt.

Die Spalsh- und Map-Aktivität erbt nicht einmal von ActionBarActivity. Wie ist das möglich und wie kann ich dafür sorgen, dass es verschwindet?

Manifest:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/Theme.AppCompat.Light" >
        <activity
            android:name=".HomeActivity"
            android:icon="@drawable/android_logo"
            android:label=""
            android:logo="@drawable/android_logo" >

            <!--
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            -->
        </activity>
        <activity
            android:name=".MapActivity"
            android:label="" >
        </activity>
        <activity
            android:name=".PackageActivity"
            android:icon="@drawable/android_logo"
            android:label=""
            android:logo="@drawable/android_logo" >
        </activity>
        <activity
            android:name=".SplashActivity"
            android:label="" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

MapActivity-Definition (es ist eine lange, also habe ich nur die Definition eingefügt):

public class MapActivity extends FragmentActivity implements LocationListener

Splash-Aktivität:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;

public class SplashActivity extends Activity{

    private static final long SPLASH_DISPLAY_LENGTH = 2000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                Intent mainIntent = new Intent(SplashActivity.this,HomeActivity.class);
                SplashActivity.this.startActivity(mainIntent);
                SplashActivity.this.finish();
            }
        }, SPLASH_DISPLAY_LENGTH);

    }

}

Antworten:


127

Wenden Sie in Ihrem Thema Folgendes für die Aktivität in an AndroidManifest.xml:

<activity android:name=".Activity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Das sollte den Trick machen.


1
Ich kann nicht verwenden, getActionBarda die Aktivität nicht vonActionBarActivity
Tomer

Wenn ich es benutze, <item name="android:windowActionBar">false</item>würde es das nicht auf allen Bildschirmen verbergen?
Tomer

Aktualisieren Sie meine Antwort, die für Ihre Bedürfnisse besser geeignet sein sollte.
Si8

130

Wenn Sie sich fragen, wie Sie sich in einer bestimmten Aktivität verstecken sollen , benötigen Sie Folgendes:

getSupportActionBar().hide(); 

32

1.Gehen Sie zu Ihrem manifest.xml Datei.

2. Finddie, activity tagfür die Sie Ihre ActionBar ausblenden möchten und dannadd ,

android: theme = "@ style / Theme.AppCompat.NoActionBar"

           <activity
            android:name=".MainActivity"
            android:theme="@style/Theme.AppCompat.NoActionBar"
            >

21

Wenn Sie Vollbild ohne actionBar und Titel erhalten möchten.

Fügen Sie es in style.xml hinzu

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

und verwenden Sie den Stil bei Aktivität von manifest.xml.

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

15

Das ActionBarexistiert normalerweise mit, Fragmentsdamit Activitydu es verstecken kannst

getActionBar().hide();
getActionBar().show();

und von dem Fragmentkannst du es machen

getActivity().getActionBar().hide();
getActivity().getActionBar().show();

6
Ich benutze: getSupportActionBar().hide(); in ActionBarActivity
Ihab Shoully

8

Wenn Sie Theme.AppCompat.Light verwenden, ist Theme.AppCompat.Light.NoActionBar ein besseres Äquivalent.

Ich habe festgestellt, dass die Verwendung von Theme.AppCompat.NoTitleBar dazu führte, dass mein Schaltflächentext unsichtbar war, sodass ich Theme.AppCompat.Light.NoActionBar verwende.

<activity android:name=".Activity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.AppCompat.Light.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

7

Das funktioniert bei mir! Setzen Sie dies in Ihre Aktivität in Manifesten ein

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

Sie können Ihr benutzerdefiniertes Thema auch in styles.xml wie folgt erstellen:

<style name="Theme.MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name = "android:windowActionBar">false</item>
        <item name = "android:windowNoTitle">true</item>
        // more custom...
    </style>

Ich hoffe das hilft.


5

Sie können den Low Profile-Modus verwenden. Siehe hier

Suchen Sie einfach danach und SYSTEM_UI_FLAG_LOW_PROFILEdimmen Sie auch die Navigationsschaltflächen, wenn sie auf dem Bildschirm vorhanden sind.


+1 für die Einführung in diese :), werde ich zuerst @ SiKni8 Lösung überprüfen, da ich nicht codierende Lösung bevorzuge
Tomer

1
Kein Problem, ich fand es sehr nützlich für die Anzeige einer Vollbildkarte in meiner App, funktioniert sehr gut für mich.
TMH

4

Die obigen Antworten würden bei der ActionBar-Sache helfen. Verwenden Sie zum Hinzufügen den folgenden Code, wenn Sie den Begrüßungsbildschirm verwenden: Verwenden Sie diesen Code, bevor Sie die Inhaltsansicht festlegen:

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

Um dies zu verdeutlichen, gehen Sie wie folgt vor:

    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);         
    setContentView(R.layout.activity_main);

Dies würde Ihren Bildschirm zu einem Vollbild machen, dh entfernen Sie die obere Leiste, in der Sie die Netzwerkleiste sehen, usw.


4

Wenden Sie in Ihrem Design Folgendes für die Aktivität in AndroidManifest.xml an:

<activity android:name=".DashboardActivity"
        android:theme="@style/AppFullScreenTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Wenden Sie dann in style.xml Folgendes in Ihrem Stil an

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

2

// Verstecke die ActionBar oben

// Diesen Code in die Java-Datei einfügen

    ActionBar actionBar=getSupportActionBar();
    actionBar.hide();

1

Dies funktioniert in API 27

Ersetzen Sie in der Datei styles.xml den folgenden Code ....

<resources>
    <!-- No Action Bar -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

Geben Sie dann in die Dateien (z. B. activity_list.xml), in die Sie eine Symbolleiste einfügen möchten, den folgenden Code ein.

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="@color/colorPrimary"/>

Wenn Sie Probleme haben, wechseln Sie zum linearen Layout (da dieser Code darauf getestet wird).


1

Von hier aus :

Ab Android 3.0 (API-Level 11) verfügen alle Aktivitäten, die das Standarddesign verwenden, über eine ActionBar als App-Leiste. Über verschiedene Android-Versionen wurden der nativen ActionBar jedoch schrittweise Funktionen der App-Leiste hinzugefügt. Als Ergebnis je die nativen ActionBar verhält sich anders an , welche Version des Android - System ein Gerät verwenden kann . Im Gegensatz dazu werden die neuesten Funktionen zur Version der Symbolleiste der Supportbibliothek hinzugefügt und sind auf jedem Gerät verfügbar, das die Supportbibliothek verwenden kann.

Eine Möglichkeit besteht darin, ActionBar vollständig zu deaktivieren (in der Datei app manifest.xml) und dann auf jeder Seite, die eine ActionBar benötigt, eine Symbolleiste hinzuzufügen.

(Folgen Sie dem obigen Link für eine schrittweise Erklärung)


0

Ersetzen Sie AndroidManifest.xml

android:theme="@style/FullscreenTheme"

zu

android:theme="@style/Theme.Design.NoActionBar"

0

Fügen Sie einen neuen Stil in Ihre style.xml ein

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="LoginTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

und fügen Sie dann die folgende Zeile in Ihr Manifest ein

<activity android:name=".Login"
        android:label="@string/app_name"
        android:theme="@style/LoginTheme"
        >

0

Überprüfen Sie, ob das Problem nach dem Ändern des Themas weiterhin vorhanden ist.

Auffüllproblem beim Erstellen eines Leerraums über dem Fragmentfenster / App-Fenster

Auffüllproblem beim Erstellen eines Leerraums über dem Fragmentfenster / App-Fenster

Sobald Sie die Polsterung entfernen - der obere Wert wird automatisch der Leerraum entfernt.

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.