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

96

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

У меня есть панель действий вверху с логотипом. На моем телефоне (Galaxy s1 I9000 V2.3) все выглядит нормально, но когда я тестирую его на Galaxy s2 v4, панель действий появляется также на экране-заставке и на экране карты.

Активность spalsh и map даже не наследуется от 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>

Это должно делать свое дело.

Si8
источник
1
Я не могу использовать, так getActionBarкак действие не наследуется отActionBarActivity
Томер
если я использую, <item name="android:windowActionBar">false</item>разве это не скроет это на всех экранах?
Томер
Обновите мой ответ, который должен быть более подходящим для ваших нужд.
Si8
137

Когда вы спрашиваете, как спрятаться в определенной деятельности , вам нужно следующее:

getSupportActionBar().hide(); 
Erluxman
источник
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

Если вы хотите получить полноэкранный режим без ActionBar и Title.

Добавьте его в 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> 
reza.cse08
источник
15

ActionBarОбычно существует вместе с Fragmentsтем от Activityвы можете скрыть

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

и Fragmentвы можете это сделать

getActivity().getActionBar().hide();
getActivity().getActionBar().show();
сандалон
источник
6
Я использую: getSupportActionBar().hide(); в ActionBarActivity
Ихаб Шулли
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>
Joshgoldeneagle
источник
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>

Надеюсь на эту помощь.

Kyo Huu
источник
5

Вы можете использовать низкопрофильный режим См. Здесь

Просто найдите, SYSTEM_UI_FLAG_LOW_PROFILEчто также затемняет кнопки навигации, если они присутствуют на экране.

TMH
источник
+1 за то, что познакомил меня с этим :), сначала я проверю решение @ SiKni8, так как я предпочитаю решение без кодирования
Томер
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);

Это сделает ваш экран полноэкранным, т.е. уберет верхнюю панель, где вы видите панель сети и т. Д.

BlueLeaf
источник
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>
Канайялал Бадал
источник
4

// Скрываем ActionBar сверху

// Добавляем этот код в 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 в качестве панели приложения. Однако функции панели приложений постепенно добавлялись во встроенную панель ActionBar в различных версиях Android. В результате собственный ActionBar ведет себя по-разному в зависимости от того, какую версию системы Android может использовать устройство . Напротив, самые последние функции добавляются в версию панели инструментов библиотеки поддержки , и они доступны на любом устройстве, которое может использовать библиотеку поддержки.

Таким образом, один из вариантов - полностью отключить ActionBar (в файле app manifest.xml), а затем добавить панель инструментов на каждую страницу, для которой требуется ActionBar.

(перейдите по указанной выше ссылке для пошагового объяснения)

LoMaPh
источник
0

Заменить AndroidManifest.xml

android:theme="@style/FullscreenTheme"

к

android:theme="@style/Theme.Design.NoActionBar"
Тарик Билла
источник
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

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

Проблема с заполнением пустого пространства поверх окна фрагмента / окна приложения

Проблема с заполнением пустого пространства поверх окна фрагмента / окна приложения

После того как вы удалите значение padding - top автоматически, пустое пространство удаляется.

Аравиндхан Кумар
источник