Android - 如何去掉ActionBar上方的条形栏

3

编辑:下面Android-Developers的回答很好地解释了解决方案

我的问题是还有另一个栏,不确定它的名称是什么 - TitleBar?(带有菜单按钮和白色正方形标志的栏)在我的ActionBar上方。我理想情况下希望将我的ActionBar与该栏合并,如果不可能,则在具有图标和菜单按钮的选项卡之间完全实现自己的栏。我尝试了几个方法(请参见下面的图片),以及如何添加选项卡的粗略代码也显示在下面。

Showing the unwanted standard bar above the ActionBar

将选项卡添加到ActionBar代码:

    actionBar = getActionBar();  // Get reference to ActionBar

    // Add some navigation tabs...

    // 1. Enable ActionBar navigation tabs
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(false);

    // 2. Add the tabs
    Tab programTab = actionBar.newTab();
    Tab settingsTab = actionBar.newTab();
    Tab historyTab = actionBar.newTab();

    programTab.setText("Program")
      .setTabListener(new TabListener<Fragment_Program>(
              this, "Program", Fragment_Program.class));

    settingsTab.setText("Settings")
             .setTabListener(new TabListener<Fragment_Settings>(
                      this, "Settings", Fragment_Settings.class));

    historyTab.setText("History")
    .setTabListener(new TabListener<Fragment_History>(
              this, "History", Fragment_History.class));

    actionBar.addTab(programTab);
    actionBar.addTab(settingsTab);
    actionBar.addTab(historyTab);

我之前的印象是getActionBar()可以获取到上面截图所示的现有栏,这样最理想。
当前应用程序主题是android:theme="@android:style/Theme.Holo.Light.DarkActionBar"
无论如何,我已经尝试了以下内容:
1. 不同的清单更改,包括不同的.NoTitleBar组合 2. 在super.onCreate()之后和setContentView()之前使用requestWindowFeature(Window.FEATURE_NO_TITLE);
我使用标准的ActionBar是因为它适用于至少4.0版本的硬件设备,而且版本极不可能发生变化。
您有什么想法吗?
谢谢。

另一个是带有小时数的那个吗? - Blackbelt
不是通知栏,它在菜单按钮和标志之间。 - mgibson
如果您想要的话,可以在操作栏上添加您自己的选项卡。请参考此帖子此链接。这样做可以将两个栏“合并”为一个。 - JJ86
这是我使用ActionBar的addTab()方法的代码,所以我感到困惑 :) 顺便说一下,我已经添加了代码。 - mgibson
2个回答

4

我理解你想要移除那个视图,对吗?

enter image description here

问题在于它是你的ActionBar。我猜你想要使用选项卡,但不带ActionBar,就像许多应用程序所做的那样。要实现这一点,请使用以下内容:

bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayShowTitleEnabled(false);
bar.setDisplayShowHomeEnabled(false);

但是要记住,如果您想实现这一点,您不应该在Fragment/Activity中填充任何菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //getSupportMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

是的,那正是我想要做的!嗯,这样可以去掉徽标并调换栏,使ActionBar保留在顶部,该栏仍带有菜单按钮但没有徽标。 - mgibson
我目前有一个ActionBar的引用,我可以轻松隐藏它,当我这样做时,我的选项卡和上面带有菜单和徽标的栏都会消失。看起来我不想要的上面的栏实际上是ActionBar的一部分。 - mgibson
ActionBar 是带有白色图标和溢出图标的黑色布局。如果您想隐藏它并仅显示选项卡,请检查编辑后的答案。 - hardartcore
啊,太完美了!干杯,注释掉它就可以了!现在我只需要创建自己的菜单图标 :) 谢谢。 - mgibson

2

你应该在这里查看@ColorWP的答案:这里

窗口标志已经在super.onCreate(savedInstanceState);中设置,此时您可能希望使用以下命令顺序:

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE); 会导致 NullPointerException,而 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 则会去掉顶部的通知栏,但我并不想这样做。 - mgibson
我刚刚提到了命令的正确顺序,并且我已经测试过'FEATURE_NO_TITLE',它可以正常工作。我猜测 'NullPointerException' 是来自其他代码的问题。 - Mohsen Afshin
我同意,我对Fragment还相当新,所以肯定有一些错误存在 :P 不管怎样还是谢谢。 - mgibson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接