2013-10-23 9 views
59

Opracowałem prostą aplikację demonstracyjną z ekranem powitalnym, mapą i zwykłymi ekranami.Android: jak ukryć ActionBar na niektórych czynnościach

Mam pasek akcji u góry, który zawiera logo. Wszystko wygląda dobrze na moim telefonie (Galaxy s1 I9000 V2.3), ale kiedy testuję go na Galaxy S2 v4, pasek akcji pojawia się również na ekranie powitalnym i na ekranie mapy.

Aktywność spalsh i map nie dziedziczy nawet po ActionBarActivity, więc jak to możliwe i jak mogę to zrobić?

Oczywisty:

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

definicja MapActivity (nie jest to długa, więc zawarte tylko definicji):

public class MapActivity extends FragmentActivity implements LocationListener 

Splash Aktywny:

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

    } 

} 

Odpowiedz

93

zastosować następującą w swojej Motyw działania w 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> 

To powinno załatwić sprawę.

+1

nie mogę użyć 'getActionBar' jako działalność nie jest dziedziczenie z' ActionBarActivity' – Tomer

+0

jeśli I użyj ' false" Czy nie ukryłoby to tego na wszystkich ekranach? – Tomer

+0

Zaktualizuj moją odpowiedź, która powinna być bardziej odpowiednia do Twoich potrzeb. – Si8

5

można użyć trybu Low Profile See here

Wystarczy wyszukać SYSTEM_UI_FLAG_LOW_PROFILE że również przyciemnia przycisków nawigacyjnych, jeśli są one obecne na ekranie.

+0

+1 za zapoznanie mnie z tym :), najpierw sprawdzę rozwiązanie @ SiKni8 jako preferuję rozwiązanie niekodowania – Tomer

+1

Nie ma problemu, uznałem, że naprawdę przydatne do wyświetlania pełnoekranowej mapy w mojej aplikacji, działa bardzo dobrze dla mnie. –

73

Jak pytasz o to, jak ukryć się w określonym działaniu; Myślę .hide(); co trzeba

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

lub

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

ActionBar zwykle występuje wzdłuż Fragments więc od Activity można go ukryć

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

i od Fragment można zrobić to

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

Używam: 'getSupportActionBar(). Hide();' w ActionBarActivity –

18

1. Przejdź do pliku manifest.xml.

2. Findactivity tag dla którego chcesz ukryć swój ActionBar a następnie add,

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

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

Jeśli używasz Theme.AppCompat.Light, lepszym odpowiednikiem będzie Theme.AppCompat.Light.NoActionBar.

Okazało się, że za pomocą Theme.AppCompat.NoTitleBar mój tekst przycisku jest niewidoczny, więc używam 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

Jeśli chcesz uzyskać pełny ekran bez paska akcji i tytułu.

Dodaj go style.xml

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

i używać styl w działalności manifest.xml.

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

Powyższe odpowiedzi pomogłyby w akcji ActionBar. Aby dodać do niego, należy użyć następującego kodu w przypadku korzystania z ekranu powitalnego: Używaj tego zanim ustawić widok treści:

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

Właśnie w celu wyjaśnienia, oto jak to zrobić:

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

w ten sposób ekran pełny ekran, czyli usunąć wierzchnią bar, gdzie można zobaczyć pasek sieciowy itp

0

działa to w API 27

w styles.xm Zamień kod na następujący ...

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

Następnie w plikach (np. activity_list.xml), w którym chcesz mieć pasek narzędzi, wstaw poniższy kod.

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

Jeśli masz problemy przełączyć do układu liniowego (bo to właśnie ten kod jest testowany na)

Powiązane problemy