如何在创build活动之前隐藏操作栏,然后再显示它?
我需要在我的蜂窝应用程序中实现启animation面。 我在activity的onCreate中使用这个代码来显示splash:
setContentView(R.layout.splash); getActionBar().hide(); 而这段代码在一段时间后显示主UI:
 setContentView(R.layout.main); getActionBar().show(); 
但是在 onCreate被调用之前会出现splash,当显示action bar时有less量时间。
我怎么能使它不显示?
我试图将主题应用到没有操作的活动栏中:
 <item name="android:windowActionBar">false</item> 
但在这种情况下getActionBar()总是返回null,我发现没有办法再次显示它。
 设置android:windowActionBar="false"确实禁用了ActionBar,但是,正如你所说, 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 
这创build了ActionBar,并在它有机会显示之前立即隐藏它。
 但现在还有另一个问题。 在主题中放置windowActionBar="false"之后,Activity将绘制正常的Window标题而不是ActionBar。 
 如果我们试图通过使用一些*.NoTitleBar股票主题来避免这种情况,或者我们尝试在我们自己的主题中放置<item name="android:windowNoTitle">true</item> ,它将不起作用。 
 原因是ActionBar 依赖于窗口标题来显示自己 – 也就是说,ActionBar是一个转换后的窗口标题。 
 所以可以帮助我们的技巧是添加一个更多的东西到我们的Activity主题xml: 
 <item name="android:windowActionBar">false</item> <item name="android:windowTitleSize">0dp</item> 
这将使窗口标题具有零高度,因此实际上不可见。
在你的情况下,完成显示启animation面后,你可以直接调用
 setContentView(R.layout.main); getActionBar().show(); 
你完成了。 该活动将开始时没有ActionBar闪烁,也不显示窗口标题。
附加:如果您多次显示和隐藏ActionBar,也许您已经注意到第一个显示不是animation。 从此显示和隐藏是animation。 如果你想在第一个显示的animation也可以使用这个:
 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(); 
但是可能需要一些额外的逻辑来检查这是否是活动的第一个显示。
这个想法是延迟一点ActionBar的隐藏。 在某种程度上,我们让ActionBar显示,但是立即隐藏它。 因此,我们超越了第一个非animation显示,下一个显示将被视为第二个,因此它将是animation。
正如您可能已经猜到的那样,ActionBar有可能在被延迟操作隐藏之前被看到。 实际上是这样的。 大多数情况下,没有任何东西可以看到,但有一段时间,你可以看到ActionBar闪烁一秒钟。
无论如何,这不是一个漂亮的解决scheme,所以我欢迎任何build议。
除了 v7支持的actionbar用户,代码将会是:
 getWindow().requestFeature(Window.FEATURE_ACTION_BAR); getSupportActionBar().hide(); 
如果您使用的是ActionBarSherlock,那么在您的活动中使用Theme.Sherlock.NoActionBar主题
 <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> 
在.class文件中使用这个简单的代码来隐藏操作栏
 getSupportActionBar().hide(); 
创build两种风格:
 <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设置为应用程序主题,将AppThemeBar设置为您想要显示ActionBar的活动。使用两种样式,当视图加载时,您不会看到操作栏。
检查这个链接Android:隐藏操作栏,同时查看加载
嗨,我有一个简单的解决scheme,使用2个主题
- 
启动屏幕主题(将其添加到清单): <style name="SplashTheme" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:windowBackground">@color/red</item> </style>
- 
正常主题(通过setTheme(R.style.Theme)将其添加到您的活动中): <style name="Theme" parent="@style/Theme.Holo"> <item name="android:windowBackground">@color/blue</item> </style>
为了支持SDK 10:
 @Override public void onCreate(Bundle savedInstanceState) { setTheme(R.style.Theme); super.onCreate(savedInstanceState); ........... ........... } 
 我也试图隐藏在Android 2.2的行动酒吧,但这些解决scheme都没有工作。 一切都以崩溃结束。 我检查了DDMS LOg,它告诉我使用'Theme.AppCompat'。最后,我通过更改android:theme="@android:style/Theme.Holo.Light.NoActionBar"解决问题 
 到android:theme="@style/Theme.AppCompat.NoActionBar" ,它的工作,但接口是黑暗的。 
 然后我试着android:theme="@style/Theme.AppCompat.Light.NoActionBar" ,最后得到我想要的。 
之后当我在开发者网站上search“AppCompat”时, 我得到了这个。
所以我认为Android 2.2的解决scheme是
 <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> 
对不起,我的英语好像总是。
对我来说最好的结果是用ThemeNoTitleBar创build一个活动,没有内容作为启动器。 然后这个活动直接调用另一个。
当然,如果你想要的话,你可以添加内容到飞溅活动,但在我的情况下,我只是想直接显示应用程序。
performance:
 <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(); } 
}
 如果你使用一个Activity包含一个启animation面,那么你可以使用SherlockActionBar来做到这一点 
 getSupportActionBar().hide(); 
启animation面后,您可以再次显示它…
 getSupportActionBar().show(); 
 它应该与Android的原生ActionBar相同。 
@Clerics解决scheme的作品。 但是,这似乎也是一些谷歌原生应用程序的问题:谷歌,玩商店,谈话。 还有其他的大型应用程序,如Skype。
编辑 :波纹解决scheme已经给我的问题,对API的actionbarsherlock <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); 
最好和简单
 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
2015年,使用AppCompat主题的支持v7库,为您的活动设置此主题。
 <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> 
 对于Splashscreen您应该在manifest使用这一行,而不要使用getActionBar() 
 <item name="android:windowActionBar">false</item> 
 并且一旦Splash Activity在主Activity下面完成使用或者什么也没有 
 <item name="android:windowActionBar">true</item> 
试试这个,对我有用:
下面摆脱活动的标题栏
  requestWindowFeature(Window.FEATURE_NO_TITLE); 
以下消除通知栏使活动全屏显示
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
(下面的完整示例)注意:在设置我们活动的内容视图之前调用了这些方法
 @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(); } 
 这可能是方便的 
 将此添加到您的清单 
  android:theme="@android:style/Theme.Light.NoTitleBar" 
干杯
在阅读所有可用选项后,我发现最好的方法是设置没有ActionBar的主题,然后在所有Activity的父级代码中设置MyTheme。
performance:
 <application ... android:theme="@android:style/Theme.Holo.Light.NoActionBar" ...> 
BaseActivity:
 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.GreenHoloTheme); } 
这样可以帮助我在应用程序启动时避免使用ActionBar!
已经发布的解决scheme带来了副作用,第一个.show()调用没有为我的ActionBar制作animation。 我有另一个很好的解决scheme,修复了:
创build一个透明的drawable – 类似的东西:
<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)); 
Imortant:不要在onCreate中立即隐藏操作栏,但稍后会稍微延迟 – 例如当布局完成创build时:
 getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { getSupportActionBar().hide(); } }); 
在您的第一个.show()调用之前设置自定义视图可见:
_actionbarRoot.setVisibility(View.VISIBLE); getSupportActionBar().show();
 如果您使用支持库而不是null,则需要调用getSupportActionBar() ,而不是getActionBar() getSupportActionBar() 。 
 把你的启animation面放在一个单独的活动中,并使用主活动的onCreate方法中的startActivityForResult来显示它。 这是有效的,因为根据文档: 
作为一种特殊情况,如果您在activity的初始onCreate(Bundle savedInstanceState)/ onResume()期间调用startActivityForResult(),并且requestCode> = 0,那么在从已启动的活动返回结果之前,您的窗口将不会显示。 这是为了避免redirect到另一个活动时出现可见的闪烁。
 只有在onCreate的参数为null (表示您的活动全新启动,而不是由于configuration更改而重新启动)时,您应该可以这样做。 
我仍然有空指针错误,最后它帮助我调用第一个getWindow()。requestFeature(),然后super.onCreate()
 public void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); getActionBar().show(); 
只需在你的styles.xml中添加这个
 <item name="android:windowNoTitle">true</item> 
 其实,你可以简单地设置与NoActionBar飞溅Activity ,并设置您的主要activity与行动栏。 
我意识到张贴链接不是最好的办法,但我强烈build议你从Google自己阅读以下文档。 这是关于如何控制你的系统用户界面(如操作栏,导航栏等)的官方安卓文档。 不幸的是,这些信息太直接发布了,但是在阅读完这些信息之后,无论您正在开发什么版本,都会明白如何显示和隐藏function,这非常简单!
Incase的链接有变化,它可以在官方的Android文档下find – 培训 – > 入门 – > 用户界面的最佳实践 – > pipe理系统 用户界面
https://developer.android.com/training/system-ui/index.html

你可以使用这个:
 getSupportActionBar().hide(); 如果它不工作尝试这一个: 
 getActionBar().hide(); 
如果以上不起作用,请尝试这样:
 在你的目录= res / values / style.xml中,打开style.xml  – >有属性parent变更为parent="Theme.AppCompat.Light.DarkActionBar" 
如果所有这一切都不起作用。 我不知道了。 但对我来说,它的作品。