Android: jak ukryć ActionBar w niektórych działaniach

95

Stworzyłem prostą aplikację demonstracyjną z ekranem powitalnym, mapą i kilkoma zwykłymi ekranami.

U góry mam pasek akcji zawierający 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.

Spalsh i aktywność mapy nawet nie dziedziczą po ActionBarActivity, więc jak to możliwe i jak mogę to usunąć?

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 (jest długa, więc dołączyłem tylko definicję):

public class MapActivity extends FragmentActivity implements LocationListener

Aktywność powitalna:

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
źródło

Odpowiedzi:

129

Zastosuj następujące elementy w swoim motywie 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ę.

Si8
źródło
1
Nie mogę użyć, getActionBarponieważ aktywność nie dziedziczy zActionBarActivity
Tomer
jeśli użyję, czy <item name="android:windowActionBar">false</item>to nie ukryje tego na wszystkich ekranach?
Tomer
Zaktualizuj moją odpowiedź, która powinna być bardziej odpowiednia dla Twoich potrzeb.
Si8,
136

Ponieważ pytasz o to, jak się ukryć w określonej czynności , potrzebujesz tego:

getSupportActionBar().hide(); 
erluxman
źródło
32

1. Przejdź do swojego manifest.xmlpliku.

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

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

           <activity
            android:name=".MainActivity"
            android:theme="@style/Theme.AppCompat.NoActionBar"
            >
Prateek Joshi
źródło
21

Jeśli chcesz uzyskać pełny ekran bez actionBar i Title.

Dodaj go w 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żyj stylu w działaniu manifest.xml.

<activity ....
      android:theme="@style/AppTheme.NoActionBar" > ......
</activity> 
reza.cse08
źródło
15

ActionBarZwykle występuje razem Fragmentswięc z Activitymożna go ukryć

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

i od tego Fragmentmożesz to zrobić

getActivity().getActionBar().hide();
getActivity().getActionBar().show();
sandalon
źródło
6
Używam: getSupportActionBar().hide(); w ActionBarActivity
Ihab Shoully
8

Jeśli używasz Theme.AppCompat.Light, lepszym odpowiednikiem byłby Theme.AppCompat.Light.NoActionBar.

Zauważyłem, że użycie Theme.AppCompat.NoTitleBar spowodowało, że tekst mojego przycisku był 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>
joshgoldeneagle
źródło
7

To działa dla mnie! Umieść to w swojej Aktywności w manifestach

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

Możesz również utworzyć własny motyw w styles.xml w następujący sposób:

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

Mam nadzieję, że to pomoże.

Kyo Huu
źródło
5

Możesz użyć trybu Low Profile. Patrz tutaj

Po prostu wyszukaj SYSTEM_UI_FLAG_LOW_PROFILEto również przyciemnia przyciski nawigacyjne, jeśli są obecne na ekranie.

TMH
źródło
+1 za wprowadzenie mnie w to :), najpierw sprawdzę rozwiązanie @ SiKni8, ponieważ wolę rozwiązanie niekodujące
Tomer
1
Nie ma problemu, okazało się, że jest to bardzo przydatne do wyświetlania mapy na pełnym ekranie w mojej aplikacji, działa naprawdę dobrze.
TMH
4

Powyższe odpowiedzi pomogłyby z działaniem ActionBar. Aby to dodać, użyj następującego kodu w przypadku korzystania z ekranu powitalnego: Użyj tego przed ustawieniem widoku zawartości:

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

Aby wyjaśnić, oto jak to zrobić:

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

Spowoduje to wyświetlenie pełnego ekranu, tj. Usunięcie górnego paska, na którym widać pasek sieci itp

BlueLeaf
źródło
4

Zastosuj następujące elementy w swoim motywie działania w AndroidManifest.xml:

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

Następnie zastosuj poniższe w swoim Style w style.xml

<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
źródło
3

// Ukryj ActionBar na górze

// Dodaj ten kod do pliku java

    ActionBar actionBar=getSupportActionBar();
    actionBar.hide();
Ajay Patel
źródło
1

Działa to w API 27

W pliku styles.xml 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órych chcesz mieć pasek narzędzi, umieść 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łącz się na układ liniowy (bo na tym jest testowany ten kod)

Smoczy ogień
źródło
1

Od tutaj :

Począwszy od systemu Android 3.0 (poziom interfejsu API 11), wszystkie działania korzystające z motywu domyślnego mają ActionBar jako pasek aplikacji. Jednak funkcje paska aplikacji były stopniowo dodawane do natywnego ActionBar w różnych wersjach Androida. W rezultacie natywny ActionBar zachowuje się różnie w zależności od wersji systemu Android, z której korzysta urządzenie . Z kolei najnowsze funkcje są dodawane do wersji paska narzędzi Toolbar w bibliotece pomocy i są dostępne na każdym urządzeniu, które może korzystać z biblioteki obsługi.

Jedną z opcji jest więc całkowite wyłączenie ActionBar (w pliku manifest.xml aplikacji), a następnie dodanie Toolbar na każdej stronie, która wymaga ActionBar.

(skorzystaj z powyższego linku, aby uzyskać wyjaśnienie krok po kroku)

LoMaPh
źródło
0

Zastąp plik AndroidManifest.xml

android:theme="@style/FullscreenTheme"

do

android:theme="@style/Theme.Design.NoActionBar"
Tarik Billa
źródło
0

Dodaj nowy styl do swojego style.xml

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

a następnie dodaj następujący wiersz w swoim manifeście

<activity android:name=".Login"
        android:label="@string/app_name"
        android:theme="@style/LoginTheme"
        >
Suraj Gupta
źródło
0

Sprawdź atrybut dopełnienia, jeśli problem nadal występuje po zmianie motywu.

Problem z wypełnieniem tworzący biały znak na górze okna fragmentu / okna aplikacji

Problem z wypełnieniem tworzący biały znak na górze okna fragmentu / okna aplikacji

Po usunięciu dopełnienia - górna wartość automatycznie usuwana jest spacja.

Aravindhan Kumar
źródło