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

    }

}
Tomer
quelle

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.

Si8
quelle
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(); 
Erluxman
quelle
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"
            >
Prateek Joshi
quelle
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> 
reza.cse08
quelle
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();
Sandale
quelle
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>
Joshgoldeneagle
quelle
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.

Kyo Huu
quelle
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.

TMH
quelle
+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.

BlueLeaf
quelle
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>
Kanaiyalal Badal
quelle
2

// Verstecke die ActionBar oben

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

    ActionBar actionBar=getSupportActionBar();
    actionBar.hide();
Ajay Patel
quelle
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).

Drachenfeuer
quelle
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)

LoMaPh
quelle
0

Ersetzen Sie AndroidManifest.xml

android:theme="@style/FullscreenTheme"

zu

android:theme="@style/Theme.Design.NoActionBar"
Tarik Billa
quelle
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"
        >
Suraj Gupta
quelle
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.

Aravindhan Kumar
quelle