【问题标题】:How to use Action Bar with Theme_NoTitleBar如何在主题 NoTitleBar 中使用操作栏
【发布时间】:2015-08-09 01:05:05
【问题描述】:

当 a) 我在大屏幕上运行,以及 b) 运行 Honeycomb 或更高版本时,如何选择性地启用操作栏?

我有一个应用程序在小型设备上需要尽可能多的屏幕空间,所以我使用 android 主题 Theme_NoTitleBar 来摆脱标题栏。在 post-3.x 系统上,这也删除了我想要的操作栏。

但在平板电脑上,我希望有操作栏。我的代码看起来像这样(简化):

import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;

public class ActionBarTest extends Activity {

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle state) {
        super.onCreate(state);
        if (Build.VERSION.SDK_INT >= 11)
            getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
        setTheme(android.R.style.Theme_NoTitleBar);
        setContentView(R.layout.main);
    }
}

但是,requestFeature() 调用无效。

另一个转折点:我仍然需要支持 Android 2.x 设备。

【问题讨论】:

标签: android android-actionbar


【解决方案1】:

我建议使用 android.support.v7.widget.Toolbar 和无操作栏主题。 工具栏 更具可定制性,并且向后兼容。此外,它是一个视图,因此您可以非常轻松地更改它的可见性。 不要忘记,您还可以使用诸如 api 级别和屏幕大小(以及许多其他)等分类器提供替代布局。您可以将工具栏包含在其中的一些中,而不是其他中,具体取决于您需要实现的目标。

希望对你有帮助。

【讨论】:

    【解决方案2】:
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    

    【讨论】:

    • 您的意思是选择一个有操作栏的主题并稍后将其关闭?
    • 我想你可以设置一个主题
    【解决方案3】:

    嗯,我找到了一种使用替代资源修复它的简单方法。

    res/values/themes.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <style name="CalcTheme" parent="android:Theme.NoTitleBar" />
      ...
    </resource>
    

    res/values-xlarge-v11:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <style name="CalcTheme" parent="android:Theme.Holo" />
    </resources>
    

    它完美地完成了这项工作。

    不过,我将把这个问题留待一会儿。我仍然想知道为什么requestFeature() 不起作用。似乎如果你有 Holo 主题,你会得到一个动作栏,如果你没有 Holo 主题,你无法得到一个动作栏,那么 requestFeature() 究竟做了什么?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      相关资源
      最近更新 更多