2013-10-23 13 views
59

Ich habe eine einfache Demo-Anwendung mit einem Begrüßungsbildschirm eine Karte und einige normale Bildschirme entwickelt.Android: wie ActionBar auf bestimmte Aktivitäten zu verbergen

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

Die Spalsh- und Map-Aktivitäten erben nicht einmal von ActionBarActivity, also wie ist das möglich und wie kann ich es verschwinden lassen?

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 ein langer, so enthalten i nur die Definition):

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

    } 

} 

Antwort

93

in den folgenden Übernehmen Sie Ihre Thema für die Aktivität in 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 tun.

+1

ich nicht 'getActionBar' verwenden kann, als die Aktivität nicht von' ActionBarActivity' erbt – Tomer

+0

wenn i benutze ' false' würde das nicht auf allen Bildschirmen versteckt? – Tomer

+0

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

5

können Sie Low Profile-Modus verwenden See here

für SYSTEM_UI_FLAG_LOW_PROFILE Suchen Sie einfach die auch die Navigationstasten gedimmt, wenn sie von Bildschirm vorhanden sind.

+0

+1 für die Einführung zu mir :), ich werde @ SiKni8 Lösung zuerst überprüfen, wie ich nicht codierende Lösung – Tomer

+1

Kein Problem, ich fand es wirklich nützlich für die Anzeige einer Vollbild-Karte in meiner App, funktioniert wirklich gut für mich. –

73

Sie fragen, wie Sie sich in einer bestimmten Aktivität verstecken können; Ich denke .Hide(); ist das, was Sie

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

oder

getSupportActionBar().hide(); 
or 
getActionBar().hide(); 
12

Die ActionBar in der Regel entlang Fragments existiert so von der Activity Sie können es verstecken

getActionbar().hide(); 
getActionbar().show(); 

und von der Fragment Sie tun können, es

brauchen
getActivity().getActionbar().hide(); 
getActivity().getActionbar().show(); 
+5

Ich benutze: 'getSupportActionBar(). Verbergen();' in ActionBarActivity –

18

1.Gehen Sie zu Ihrer manifest.xml Datei.

2. Find die activity tag, für die Sie Ihre ActionBar ausblenden möchten und dann add,

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

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

Wenn Sie Theme.AppCompat.Light verwenden, wäre eine bessere Entsprechung Theme.AppCompat.Light.NoActionBar.

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

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

Wenn Sie den Vollbildmodus ohne ActionBar und Titel erhalten möchten.

es in style.xml hinzufügen

<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 den Stil an Aktivität von manifest.xml verwenden.

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

Die obigen Antworten würden mit der ActionBar-Sache helfen. Um es hinzuzufügen, verwenden Sie den folgenden Code ein, falls Sie den Splash-Screen verwenden: verwenden, bevor Sie den Inhalt anzeigen gesetzt:

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

Nur um zu klären, hier ist, wie Sie es tun:

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

Dies würde dem Bildschirm ein Vollbild, dh entfernen Sie die Top-Bar, wo Sie die Netzwerkleiste, etc.

0

Dies funktioniert in API 27

im styles.xm machen l ersetzen Code zu dem folgenden ....

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

Dann in den Dateien (z. activity_list.xml), in der Sie eine Symbolleiste haben möchten, geben Sie 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 auf lineares Layout wechseln (denn das ist, was dieser Code auf getestet wird)