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

Posted

技术标签:

【中文标题】Android:如何在某些活动上隐藏 ActionBar【英文标题】:Android: how to hide ActionBar on certain activities 【发布时间】:2013-10-23 15:01:07 【问题描述】:

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

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

    


【问题讨论】:

【参考方案1】:

当您询问如何在某些活动隐藏时,这就是您所需要的:

getSupportActionBar().hide(); 

【讨论】:

【参考方案2】:

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>

这应该可以解决问题。

【讨论】:

我不能使用getActionBar,因为活动不是从ActionBarActivity继承的 如果我使用&lt;item name="android:windowActionBar"&gt;false&lt;/item&gt; 会不会在所有屏幕上都隐藏它? 更新我的答案,应该更适合您的需要。【参考方案3】:

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

2.Find activity tag 您要为其隐藏 ActionBar 然后 add

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

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

【讨论】:

【参考方案4】:

如果你想在没有 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> 

【讨论】:

【参考方案5】:

ActionBar 通常与Fragments 一起存在,因此您可以从Activity 隐藏它

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

您可以通过Fragment 做到这一点

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

【讨论】:

我在 ActionBarActivity 中使用:getSupportActionBar().hide();【参考方案6】:

这对我有用!将它放在清单中的 Activity 中

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

希望对您有所帮助。

【讨论】:

【参考方案7】:

如果您使用的是 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>

【讨论】:

【参考方案8】:

要隐藏 ActionBar,请将此代码添加到 java 文件中。

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

【讨论】:

【参考方案9】:

您可以使用低调模式 See here

只需搜索SYSTEM_UI_FLAG_LOW_PROFILE,如果屏幕上存在导航按钮,它们也会变暗。

【讨论】:

+1 向我介绍了这个:),我会先检查@SiKni8 解决方案,因为我更喜欢非编码解决方案 没问题,我发现它对于在我的应用程序中显示全屏地图非常有用,对我来说非常有用。【参考方案10】:

以上答案将有助于 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);

这将使您的屏幕成为全屏,即删除您看到网络栏的顶部栏等

【讨论】:

【参考方案11】:

在您的主题中为 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>

【讨论】:

【参考方案12】:
@Override
    public void onResume() 
        super.onResume();
        getSupportActionBar().hide();
    

    @Override
    public void onStop() 
        super.onStop();
        getSupportActionBar().show();
    

【讨论】:

【参考方案13】:

这适用于 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_
android:layout_
android:background="@color/colorPrimary"/>

如果您遇到问题切换到线性布局(因为这是测试此代码的内容)

【讨论】:

【参考方案14】:

来自here:

从 Android 3.0(API 级别 11)开始,所有使用默认主题的活动都有一个 ActionBar 作为应用栏。但是,应用栏功能已逐渐添加到各种 Android 版本的原生 ActionBar 中。因此,本机 ActionBar 的行为会根据设备可能使用的 Android 系统版本而有所不同。相比之下,最新的功能被添加到支持库的工具栏版本中,并且可以在任何可以使用支持库的设备上使用。

因此,一种选择是完全禁用 ActionBar(在应用 manifest.xml 文件中),然后在每个需要 ActionBar 的页面中添加 Toolbar。

(按照上面的链接进行分步说明)

【讨论】:

【参考方案15】:

用于选择性地在活动中隐藏 Actionbar:

在onCreate中加入如下代码(最好在函数的最后一行)

科特林:

supportActionBar?.hide()

Java:

getSupportActionBar().hide();

【讨论】:

【参考方案16】:

替换AndroidManifest.xml

android:theme="@style/FullscreenTheme"

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

【讨论】:

【参考方案17】:

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

【讨论】:

【参考方案18】:

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

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

一旦你删除了 padding - top 值,空格就会自动被删除。

【讨论】:

【参考方案19】:

第一个脸颊 MainActivity 为活动标签,Like -

公共类 MainActivity 扩展 AppCompatActivity

然后转到menifest xml文件并写入-

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

在活动标签中

【讨论】:

【参考方案20】:

如果您的活动扩展了 AppCompatActivity 那么您可以添加此行 super.getSupportActionBar().hide();setContentView()

之前

【讨论】:

【参考方案21】:
android:theme="@style/Theme.MaterialComponents.Light.NoActionBar"

这对我有用

【讨论】:

以上是关于Android:如何在某些活动上隐藏 ActionBar的主要内容,如果未能解决你的问题,请参考以下文章

如何在主菜单android中以隐藏图标模式启动应用程序

如何在Android中判断软键盘是不是弹出或隐藏

使用“com.android.camera.action.CROP”意图裁剪图像,在某些设备上返回小尺寸位图

当活动在android中启动时如何隐藏软键盘?

隐藏或删除特定活动的操作栏 |安卓

Android 活动未在某些设备上启动(错误膨胀类)