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

Tim*_*ele 53 android android-layout android-activity

我有一个显示文本的简单应用程序.

该应用程序以一个带有几个选项的主屏幕开始(例如,一个信息按钮,可以显示有关该应用程序的信息,一个浏览按钮,允许用户查看可以显示的所有单个文本).主按钮指向另一个显示文本的屏幕.通过向左和向右滑动,他可以看到不同的文本段落.这是该应用程序的主要目的.

目前我已经实施了ActionBar.我的MainActivity.Java扩展了AppCompatActivity.应用程序中的所有内容都在此活动中.

现在我想这样做,所以ActionBar只出现在"显示"模式下,而不是在启动屏幕或"信息"/"浏览"模式下.

是否可以在应用程序的一个部分中安装ActionBar,而在应用程序的另一部分中没有 ActionBar?(并将其全部保留在相同的活动中?)

我一直在努力做到这一点,但没有用.如果可以,我接下来应该尝试什么?

到目前为止,我尝试过以下方面:

1)创建这个主题

<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
    <item name="android:windowActionBar">false</item>  
    <item name="android:windowNoTitle">true</item>
</style>  
Run Code Online (Sandbox Code Playgroud)

并将其应用于MainActivity ...

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.NoActionBar" > 
Run Code Online (Sandbox Code Playgroud)

....执行此操作后,ActionBar仍然存在.(这来自这个SO帖子(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);
Run Code Online (Sandbox Code Playgroud)

这来自于研究这篇SO帖子:( 如何在创建活动之前隐藏操作栏,然后再次显示它?)

有什么建议?

Eug*_*nec 88

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

在活动要具有操作栏使用源自一个主题Theme.AppCompat,Theme.AppCompat.LightTheme.AppCompat.Light.DarkActionBar.这将允许您动态隐藏或显示此类活动中的操作栏.您将无法使用这些主题提供自己的操作栏.

有程序兼容性-V7行动酒吧工作,你需要通过调用来获得它getSupportActionBar()的替代getActionBar().


the*_*e64 53

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

隐藏

getSupportActionBar().hide();
Run Code Online (Sandbox Code Playgroud)

显示

getSupportActionBar().show();
Run Code Online (Sandbox Code Playgroud)

它也可以从碎片中完成

隐藏

getActivity().getSupportActionBar().hide();
Run Code Online (Sandbox Code Playgroud)

显示

getActivity().getSupportActionBar().show();
Run Code Online (Sandbox Code Playgroud)

编辑:

正如@RenniePet所说,

你需要调用((AppCompatActivity)getActivity()).getSupportActionBar(),如果你使用ToolbarActionBar.

  • 要在片段中使用,我必须这样做:"((AppCompatActivity)getActivity()).getSupportActionBar().show();" (3认同)

Pan*_*kaj 11

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

getSupportActionBar().hide();  // for hiding
getSupportActionBar().show();  // for showing
Run Code Online (Sandbox Code Playgroud)

  • 注意,现在不推荐使用`ActionBarActivity`.应该使用`AppCompatActivity`代替 (2认同)
  • `hide` 调用在我的应用程序中无效。 (2认同)

小智 5

<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
    <item name="android:windowActionBar">false</item>  
    <item name="android:windowNoTitle">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
    <item name="windowActionBar">false</item>  
    <item name="android:windowNoTitle">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我希望它可以帮到你.