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

    }

}

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


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

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

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> 

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

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>

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.


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.


+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


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>

3

// Ukryj ActionBar na górze

// Dodaj ten kod do pliku java

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

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)


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)


0

Zastąp plik AndroidManifest.xml

android:theme="@style/FullscreenTheme"

do

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

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.