如何使用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.NoActionBar
或Theme.AppCompat.Light.NoActionBar
派生的主题。 除非您通过setSupportActionBar(Toolbar)
提供自己的行为,否则此活动将永远无法显示操作栏。
在您希望使用从Theme.AppCompat
, Theme.AppCompat.Light
或Theme.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 -->