Android:如何在某些活动中隐藏ActionBar


93

我开发了一个简单的演示应用程序,其中包含启动屏幕,地图和一些常规屏幕。

我在顶部有一个包含徽标的操作栏。在我的手机(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);

    }

}

Answers:


127

将以下内容应用于“活动”中的主题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>会不会在所有屏幕上都隐藏它?
2013年

更新我的答案,它应该更适合您的需求。
2013年

130

当你问有关如何隐藏在一个特定的活动,这是你所需要的:

getSupportActionBar().hide(); 

32

1.转到您的manifest.xml文件。

2. Findactivity tag您要隐藏你的动作条,然后add

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> 

15

ActionBar通常沿着存在Fragments所以从Activity您可以将其隐藏

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

Fragment你可以做到

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

6
我使用:getSupportActionBar().hide(); 在ActionBarActivity
埃哈卜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 2013年

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应用以下内容:

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


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中。结果,原生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

更改主题后,如果问题仍然存在,请检查padding属性。

填充问题在片段窗口/应用程序窗口顶部创建空白

填充问题在片段窗口/应用程序窗口顶部创建空白

删除填充-最大值后,空白将自动删除。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.