Android: як приховати ActionBar для певних дій


93

Я розробив простий демонстраційний додаток із початковим екраном карти та кількома звичайними екранами.

У мене вгорі є панель дій, яка містить логотип. Це все добре виглядає на моєму телефоні (Galaxy s1 I9000 V2.3), але коли я тестую його на Galaxy s2 v4, панель дій з’являється також на екрані заставки та на екрані карти.

Активність спалів та карт навіть не успадковується від ActionBarActivity, так як це можливо і як я можу змусити це зникнути?

Маніфест:

<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 (воно довге, тому я включив лише визначення):

public class MapActivity extends FragmentActivity implements LocationListener

Активність сплеску:

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

    }

}

Відповіді:


129

Застосуйте у своїй темі для діяльності наступне 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>

Це повинно зробити трюк.


1
Я не можу використовувати, getActionBarоскільки діяльність не успадковується відActionBarActivity
Tomer

якщо я використовую, <item name="android:windowActionBar">false</item>чи не буде це приховувати на всіх екранах?
Томер

Оновіть мою відповідь, яка повинна відповідати вашим потребам.
Si8

131

Коли ви запитуєте про те, як сховатися в певній діяльності , ось що вам потрібно:

getSupportActionBar().hide(); 

32

1. Перейдіть до свого manifest.xmlфайлу.

2. , для якого ви хочете , щоб приховати свій ActionBar , а потім ,Findactivity tagadd

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

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

21

Якщо ви хочете отримати повноекранний режим без панелі дії та заголовка.

Додайте його в 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>

і використовувати стиль під час дії manifest.xml.

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

15

ActionBarЗазвичай існує разом з Fragmentsтим від Activityви можете приховати

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

і з цього Fragmentви можете це зробити

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

6
Я використовую: getSupportActionBar().hide(); in ActionBarActivity
Ihab Shoully

8

Якщо ви використовували Theme.AppCompat.Light, кращим еквівалентом буде Theme.AppCompat.Light.NoActionBar.

Я виявив, що використання Theme.AppCompat.NoTitleBar спричинило невидимість тексту моєї кнопки, тому я використовую 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

Це працює для мене! Помістіть це у своїй діяльності в маніфестах

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

Ви також можете створити власну тему в styles.xml так:

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

Сподіваюся, це допоможе.


5

Ви можете використовувати режим низького профілю Дивіться тут

Просто шукайте, SYSTEM_UI_FLAG_LOW_PROFILEщо також затьмарює кнопки навігації, якщо вони присутні на екрані.


+1 за ознайомлення мене з цим :), я спершу перевірю рішення @ SiKni8, оскільки віддаю перевагу рішенням без кодування
Tomer

1
Немає проблем, я знайшов це дійсно корисним для відображення повноекранної карти в моєму додатку, дуже добре для мене працює.
TMH

4

Наведені вище відповіді допомогли б у використанні ActionBar. Щоб додати до нього, використовуйте такий код, якщо ви використовуєте екран заставки: Використовуйте це перед тим, як встановити подання вмісту:

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

Щоб лише пояснити, ось як ви це робите:

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

Це зробить ваш екран повноекранним, тобто видалить верхню панель, де ви бачите мережеву панель тощо


4

Застосуйте у своїй Темі для активності в 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>

Потім застосуйте наступне у своєму Стилі у 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>

2

// Приховати панель дій зверху

// Додати цей код у файл Java

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

1

Це працює в API 27

У styles.xml замініть код на такий ....

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

Потім у файли (наприклад, Activity_list.xml), в яких ви хочете мати панель інструментів, помістіть такий код.

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

Якщо у вас є проблеми з переходом на лінійний макет (адже саме на цьому тестується цей код)


1

Від сюди :

Починаючи з Android 3.0 (рівень API 11), усі дії, які використовують тему за замовчуванням, мають панель дій як панель додатків. Однак функції панелі додатків поступово додаються до рідної ActionBar під час різних версій Android. Як результат, власний ActionBar поводиться по-різному, залежно від того, яку версію системи Android може використовувати пристрій . Навпаки, найновіші функції додані до версії Панелі інструментів бібліотеки підтримки , і вони доступні на будь-якому пристрої, який може використовувати бібліотеку підтримки.

Отже, одним із варіантів є повне вимкнення ActionBar (у файлі програми manifest.xml), а потім додавання панелі інструментів на кожну сторінку, яка потребує ActionBar.

(перейдіть за посиланням вище для покрокового пояснення)



0

Додайте новий стиль у свій 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>

а потім додайте наступний рядок у свій маніфест

<activity android:name=".Login"
        android:label="@string/app_name"
        android:theme="@style/LoginTheme"
        >

0

Перевірте наявність атрибута заповнення, якщо проблема все ще існує після зміни теми.

Проблема з заповненням, створюючи пробіл поверх вікна фрагмента / вікна програми

Проблема з заповненням, створюючи пробіл поверх вікна фрагмента / вікна програми

Після видалення заповнення - верхнє значення автоматично пробіл видаляється.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.