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

时间:2013-10-23 15:01:07

标签: java android android-actionbar

我开发了一个简单的演示应用程序,带有启动画面,地图和一些常规屏幕。

我的顶部有一个包含徽标的操作栏。这一切在我的手机上看起来很好(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);

    }

}

21 个答案:

答案 0 :(得分:112)

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 :(得分:92)

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

getSupportActionBar().hide(); 

答案 2 :(得分:25)

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

2. Find要隐藏ActionBar的activity tag,然后add

  

机器人:主题= “@风格/ Theme.AppCompat.NoActionBar”

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

答案 3 :(得分:17)

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

答案 4 :(得分:12)

ActionBar通常存在Fragments,所以Activity你可以隐藏它

getActionbar().hide();
getActionbar().show();

并从Fragment你可以做到

getActivity().getActionbar().hide();
getActivity().getActionbar().show();

答案 5 :(得分: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>

答案 6 :(得分:5)

您可以使用低调模式 See here

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

答案 7 :(得分:5)

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

@ReactMethod
    public void cannyEdges(String imageAsBase64, int treshold, Promise promise) {
        try {
            // Constants
            Size BLUR_SIZE = new Size(3,3);
            int KERNEL_SIZE = 3;
            int RATIO = 3;
            int MAX_LOW_THRESHOLD = 100;

            int lowTreshold = (treshold <= MAX_LOW_THRESHOLD) ? treshold : MAX_LOW_THRESHOLD;

            // decode base64 string to matrix
            Bitmap srcImage = base64ImageToBitmap(imageAsBase64);
            Mat srcMat = new Mat();
            Utils.bitmapToMat(srcImage, srcMat);

            // rotate image to be portrait
            Mat orientedMat = rotateBoxed(srcMat, -90);

            // blur the image
            Mat bluredMat = new Mat();
            Mat cannyMat = new Mat();
            Imgproc.blur(orientedMat, bluredMat, BLUR_SIZE);
            // NEXT LINE THROWS THE ERROR
            Imgproc.Canny(bluredMat, cannyMat, lowTreshold, lowTreshold * RATIO, KERNEL_SIZE, false);

            // return blured image wrapped in promise
            Bitmap dstImage = Bitmap.createBitmap(cannyMat.cols(), cannyMat.rows(), srcImage.getConfig());
            Utils.matToBitmap(cannyMat, dstImage);
            promise.resolve(bitmapToBase64(dstImage));
        } catch (Exception e) {
            System.out.println("Oh snap, some Exception occured!");
            System.out.println(e.getMessage());
            e.printStackTrace(System.out);
            promise.reject("Could not perform canny edge detection on image!", e);
        }
    }

答案 8 :(得分:5)

这对我有用!把它放在你的活动清单

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

希望得到这个帮助。

答案 9 :(得分: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);

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

答案 10 :(得分:3)

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

答案 11 :(得分:1)

来自here

  

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

所以一个选项是完全禁用ActionBar(在app manifest.xml文件中),然后在每个需要ActionBar的页面中添加工具栏。

(按照上述链接逐步说明)

答案 12 :(得分: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"/>

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

答案 13 :(得分:0)

替换AndroidManifest.xml

android:theme="@style/FullscreenTheme"

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

答案 14 :(得分: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"
        >

答案 15 :(得分:0)

检查主题属性更改后是否仍然存在填充属性。

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

Padding Issue creating a white space on top of fragment window / app window

一旦删除了填充-顶部值就会自动删除空白。

答案 16 :(得分:0)

活动标记的第一个脸颊MainActivity,例如-

公共类MainActivity扩展了 AppCompatActivity

然后转到清单xml文件并编写-

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

活动代码中

答案 17 :(得分:0)

用于有选择地隐藏活动中的操作栏:

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

科特林:

supportActionBar?.hide()

Java:

getSupportActionBar().hide();

答案 18 :(得分:0)

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

之前

答案 19 :(得分:0)

@Override
    public void onResume() {
        super.onResume();
        getSupportActionBar().hide();
    }

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

答案 20 :(得分:0)

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

这对我有用