如何隐藏动作栏之前的活动被创建,然后再显示它?

我需要在我的蜂窝应用程序中实现启动画面。 我在活动的onCreate中使用此代码来显示splash:

setContentView(R.layout.splash);
getActionBar().hide();

这段代码将显示主UI:

setContentView(R.layout.main);
getActionBar().show();

但是之前 onCreate被调用并出现飞溅,有一小段时间当操作栏显示。

我怎样才能使动作栏不可见?

我尝试将主题应用于没有动作条的活动:

<item name="android:windowActionBar">false</item>

但在这种情况下,getActionBar()总是返回null,我发现没有办法再次显示它。

309593 次浏览

对于Splashscreen,你应该在manifest中使用这一行,而不是使用getActionBar()

<item name="android:windowActionBar">false</item>

一旦Splash Activity在主Activity中完成,使用下面或什么都没有

<item name="android:windowActionBar">true</item>

将你的启动画面放在一个单独的活动中,并使用主活动的onCreate方法中的startActivityForResult来显示它。根据医生的说法,这是因为:

作为一个特殊情况,如果你在你的活动的初始onCreate(Bundle savedInstanceState)/onResume()期间用requestCode >= 0调用startActivityForResult(),那么你的窗口将不会显示,直到从启动的活动返回结果。这是为了避免重定向到另一个活动时可见的闪烁。

只有当onCreate的参数是null(表示活动的新启动,而不是由于配置更改而重新启动)时,您才应该这样做。

如果你使用一个包含闪屏的Activity,那么你可以通过使用SherlockActionBar来做到这一点

getSupportActionBar().hide();

在启动画面之后,你可以用……

getSupportActionBar().show();

它应该与Android的本机ActionBar相同。

@牧师的解决方案工作。但这似乎也是谷歌的一些原生应用程序的问题:谷歌、play store、talk。还有其他大型应用程序,如skype。

编辑:贝娄解决方案已经给我的问题actionbarsherlock在api <4.0,原因是setTheme不工作前冰淇淋三明治

在应用程序或活动标签的清单中添加以下内容:

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

然后在你的主要活动中

    // Set theme
setTheme(R.style.YOUR_THEME);
getSupportActionBar().setTitle(R.string.title);


// Start regular onCreate()
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

设置android:windowActionBar="false"确实禁用了动作栏,但是,正如你所说,getActionBar();返回null。 这可以通过:

来解决
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();


setContentView(R.layout.splash); // be sure you call this AFTER requestFeature

这将创建动作栏,并在它有机会显示之前立即隐藏它。

但是现在有另一个问题。在主题中放入windowActionBar="false"后,活动绘制其正常的窗口标题而不是动作栏 如果我们试图通过使用一些*.NoTitleBar库存主题来避免这种情况,或者我们试图将<item name="android:windowNoTitle">true</item>放在我们自己的主题中,它将不起作用 原因是ActionBar 取决于在窗口标题上显示自己——也就是说ActionBar是一个转换后的窗口标题 因此,可以帮助我们解决这个问题的技巧是在Activity主题xml中添加一个东西:

<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>

这将使窗口标题的高度为零,因此实际上是不可见的。

在您的情况下,在显示启动画面后,您可以简单地调用

setContentView(R.layout.main);
getActionBar().show();

这样就做完了。活动将开始没有动作栏闪烁,也没有窗口标题显示。

< >强插件: 如果你多次显示和隐藏动作栏,也许你已经注意到第一个显示是动画。从那时起,显示和隐藏是动画。如果你想在第一次显示时也有动画,你可以使用这个:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);


// delaying the hiding of the ActionBar
Handler h = new Handler();
h.post(new Runnable() {
@Override
public void run() {
getActionBar().hide();
}
});

同样的事情也可以实现:

protected void onPostResume() {
super.onPostResume();
getActionBar().hide();

但是它可能需要一些额外的逻辑来检查这是否是Activity的第一次显示。

这个想法是延迟一点动作栏的隐藏。在某种程度上,我们让动作栏显示出来,但随后立即隐藏它。因此,我们超越了第一次非动画的展示,下一次展示将被认为是第二次,因此它将是动画的。

正如你可能已经猜到的,在ActionBar 可以被延迟操作隐藏之前,它有机会被看到。事实就是这样。大多数时候什么也看不见,但偶尔,你可以看到动作栏闪烁一秒钟。

无论如何,这都不是一个很好的解决方案,所以我欢迎任何建议。

除了对于v7支持动作栏的用户,代码将是:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();

如果你正在使用ActionBarSherlock,那么在你的活动中使用Theme. sherlock . noactionbar Theme

<activity
android:name=".SplashScreenActivity"
android:theme="@style/Theme.Sherlock.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
解决方案已经发布了附带的副作用,第一个.show()调用没有为我动画动作栏。 我得到了另一个很好的解决方案,它修复了:

创建一个透明的可绘制对象——就像这样:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="#00000000" />
</shape>

将实际的动作栏背景设置为你在动作栏上设置的一个不可见的自定义视图:

getSupportActionBar().setCustomView(R.layout.actionbar_custom_layout);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);

在onCreate中为动作栏设置透明背景:

getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_transparent));

重要提示:不要立即在onCreate中隐藏动作栏,但稍后会有一点延迟-例如,当布局创建完成时:

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
getSupportActionBar().hide();
}
});

在你第一次调用.show()之前,设置自定义视图可见:

_actionbarRoot.setVisibility(View.VISIBLE);
getSupportActionBar().show();

嗨,我有一个简单的解决方案,使用2个主题

  1. 启动画面主题(将其添加到清单):

    <style name="SplashTheme" parent="@android:style/Theme.Holo.NoActionBar"> & lt;项目名称= " android: windowBackground "祝辞@color / red< / item> 代码& lt; / style> < / > < / p > < /李>

  2. 正常主题(添加到您的活动setTheme(R.style.Theme)):

    <style name="Theme" parent="@style/Theme. holo ">& lt;项目名称= " android: windowBackground "祝辞@color / blue< / item> 代码& lt; / style> < / > < / p > < /李>

支持SDK 10:

@Override
public void onCreate(Bundle savedInstanceState) {


setTheme(R.style.Theme);
super.onCreate(savedInstanceState);


...........
...........
}

创建两个样式:

<style name="AppThemeNoBar" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
</style>


<style name="AppThemeBar" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">false</item>
</style>

将AppThemeNoBar设置为应用程序主题,将appthemmebar设置为您想要显示actionbar的活动 使用两种样式,当视图加载时,你将看不到操作栏。< / p >

检查这个链接Android:隐藏操作栏,同时查看加载

对我来说,最好的结果是用ThemeNoTitleBar创建一个活动,没有内容作为启动器。然后这个活动直接调用给对方。

当然,如果你愿意,你可以向Splash Activity添加内容,但在我的情况下,我只想直接显示应用程序。

清单:

<activity
android:name="com.package.SplashActivity"
android:theme="@android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

活动:

public class SplashActivity extends Activity{


@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);


//start StartActivity
Intent intent = new Intent(this, StartActivity.class);
startActivity(intent);
finish();
}

我仍然有空指针的错误,最后它帮助我调用第一个getWindow().requestFeature(),然后super.onCreate()

public void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
getActionBar().show();
实际上,你可以简单地用NoActionBar设置splash Activity 并设置你的主activity与动作栏。< / p >

试试这个,对我来说很管用:

下面去掉了活动的标题栏

 requestWindowFeature(Window.FEATURE_NO_TITLE);

下面消除了通知栏,使活动全屏显示

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

(完整示例如下) 注意:这些方法是在我们设置activity

的内容视图之前调用的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


// Sets Application to full screen by removing action bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);


setContentView(R.layout.activity_main);


// without this check, we would create a new fragment at each orientation change!
if (null == savedInstanceState)
createFragment();
}

我知道发布链接不是最好的方法,但我强烈建议你阅读下面谷歌自己的文档。这是关于如何控制你的系统ui(像动作栏,导航栏等)的官方android文档。不幸的是,这些信息太多了,不能直接发布,但在阅读完这篇文章后,你将确切地了解如何显示和隐藏功能,无论你开发的是什么版本,它是如此简单!

如果链接发生变化,它可以在官方android文档培训 -> 开始 -> 用户界面的最佳实践 -> 管理系统界面下找到

https://developer.android.com/training/system-ui/index.html

enter image description here

只需将其添加到您的styles.xml中

<item name="android:windowNoTitle">true</item>

这可能很方便
将此添加到您的清单

 android:theme="@android:style/Theme.Light.NoTitleBar"

干杯

在阅读了所有可用选项后,我发现最好的方法是设置主主题而不使用ActionBar,然后在所有活动的父级代码中设置MyTheme。

清单:

<application
...
android:theme="@android:style/Theme.Holo.Light.NoActionBar"
...>

BaseActivity:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.GreenHoloTheme);
}

这种方法可以帮助我在应用程序启动时避免使用ActionBar !

如果你因为使用支持库而有null,而不是getActionBar(),你需要调用getSupportActionBar()

最好和简单

< p > <代码> requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow () .setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); < /代码> < / p >

我还试图在Android 2.2上隐藏操作栏,但这些解决方案都不起作用。一切都以崩溃告终。我检查了DDMS日志,它告诉我使用“Theme.AppCompat”。最后,我通过改变android:theme="@android:style/Theme.Holo.Light.NoActionBar"Line解决了这个问题

进入__abc0和它工作,但界面是黑暗的。

然后我尝试android:theme="@style/Theme.AppCompat.Light.NoActionBar",终于得到了我想要的。

之后,当我在我得到了这个。上搜索“AppCompat”时

所以我认为Android 2.2的解决方案是

<activity
android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

对我的英语很抱歉,一如既往。

在你的.class文件中使用这个简单的代码来隐藏动作栏

getSupportActionBar().hide();

2015年,使用支持v7库与AppCompat主题,设置此主题为您的活动。

<style name="AppTheme.AppStyled" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimaryDark">@color/md_indigo_100</item>
<item name="colorPrimary">@color/md_indigo_500</item>
<item name="colorAccent">@color/md_red_500</item>
<item name="android:textColorPrimary">@color/md_white_1000</item>
<item name="android:textColor">@color/md_purple_500</item>
<item name="android:textStyle">bold</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>

你可以用这个:

getSupportActionBar().hide();如果它不工作,尝试这个:

getActionBar().hide();

如果以上都不行,试试下面的方法:

在你的目录= res/values/style.xml中,打开style.xml ->有属性parent更改为parent="Theme.AppCompat.Light.DarkActionBar"

如果这一切都不奏效。我也不知道了。但对我来说很管用。

最好的方法是将第一个活动作为空白活动和您想要放置的内容,然后在一段时间后触发另一个活动。 按照这种方法,你可以将第一个活动作为你的启动画面,而不需要操作栏或任何东西。 这里是我的第一个活动

package com.superoriginal.rootashadnasim.syllabus;


import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;


public class first_screen extends AppCompatActivity {






@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_screen);




final Handler h=new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent=new     Intent(getApplicationContext(),DrawerChooseBranchMainActivity.class);
startActivity(intent);
}
},2000);


}
}
在此之后,您可以将任何活动作为第一个活动 如果你想在任何屏幕上都没有动作栏,那么只需在你的styles

中添加这个
    <item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

Android studio提供了全面屏的构建模板,如果你使用Android studio,你可以按照下面的步骤来实现全面屏的活动。

创建新活动的第一步

Select Select全屏活动

完成了。Android工作室做了你的工作,现在你可以检查代码全屏。

只需将此添加到MainActivity的onCreate函数中。

val actionBar = supportActionBar?.apply { hide() }

这是我用过的最好的方法 进入java文件,在onCreate之后:

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


// Take instance of Action Bar
// using getSupportActionBar and
// if it is not Null
// then call hide function
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
}