如何使用AppCompat v.7显示和隐藏ActionBar

我有一个简单的应用程序,显示文字。

该应用程序开始与一个主屏幕上有几个选项(例如一个信息button,导致有关应用程序的信息,浏览button,使用户可以看到所有可以显示的文本片段)。 主button导致另一个显示文本的屏幕。 通过左右滑动,他可以看到不同的文字段落。 这是应用程序的主要目的。

目前我有一个ActionBar实现。 我的MainActivity.Java扩展AppCompatActivity。 应用程序中的一切都在这个活动中。

现在,我想让ActionBar仅在“显示”模式下显示,而不是在启动屏幕或“信息”/“浏览”模式下显示。

是否有可能在应用程序的一部分中有一个ActionBar,而在应用程序的另一部分没有 ActionBar? (并保持在同一个活动?)

我一直在试图完成这个无用的。 如果这是可能的,我应该接下来尝试什么?

到目前为止,我已经尝试了以下内容:

1)创build这个主题

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

并将其应用于MainActivity …

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

这样做之后,ActionBar仍然在那里。 (这来自这个SOpost( android:windowNoTitle不会隐藏与appcompat-v7 21.0.0操作栏 )

2)另一个尝试是将此添加到onCreate。

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTION_BAR); getActionBar().hide(); setContentView(R.layout.activity_main); 

这是来自于研究这个SOpost:( 如何在活动创build之前隐藏操作栏,然后再显示它? )

有什么build议么?

你想要没有操作栏的活动中使用从Theme.AppCompat.NoActionBarTheme.AppCompat.Light.NoActionBar派生的主题。 除非您通过setSupportActionBar(Toolbar)提供自己的行为,否则此活动将永远无法显示操作栏。

您希望使用从Theme.AppCompatTheme.AppCompat.LightTheme.AppCompat.Light.DarkActionBar派生的主题的活动 。 这将允许您dynamic地隐藏或显示此活动中的操作栏。 您将无法使用这些主题提供您自己的操作栏。

使用appcompat-v7操作栏时,您需要通过调用getSupportActionBar()而不是getActionBar()来获取它。

您可以编程方式隐藏和显示ActionBar。

隐藏

 getSupportActionBar().hide(); 

以显示

 getSupportActionBar().show(); 

它也可以从碎片中完成

隐藏

 getActivity().getSupportActionBar().hide(); 

以显示

 getActivity().getSupportActionBar().show(); 

编辑:

正如@RenniePet指出的那样 ,

如果您使用Toolbar作为ActionBar ,则需要调用((AppCompatActivity)getActivity()).getSupportActionBar()

将您的活动扩展为AppCompatActivity ,然后使用操作栏作为: –

 getSupportActionBar().hide(); // for hiding getSupportActionBar().show(); // for showing 
 <style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light"> <item name="android:windowActionBar">false</item> <item name="android:windowNoTitle">true</item> </style> 

删除项目windowActionbar.just中的android如下所示:

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

我希望它可以帮助你。

AppCompatActivity有自己的embedded式工具栏。 你不需要在你的主要xml中使用额外的工具栏定义。

只需调用getSupportActionBar()。show()

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().show(); } public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { TextView text1=(TextView)findViewById(R.id.textView); text1.setText("I changed the text!"); } return super.onOptionsItemSelected(item); } 

在onCreate方法中,在setContentView之后,使用这个简单来显示或隐藏每个类。

 getSupportActionBar().hide(); getSupportActionBar().show(); 

如果你想设置标题,

 getSupportActionBar().setTitle("This is ToolBar"); 

我希望这可以解决。 它在我的系统上工作:

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

使用AppTheme解除所有活动的AppTheme
styles.xml

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- .NoActionBar -->