我有一个奇怪的问题 . 我正在使用targetsdk 13制作应用程序 .
在我的主要活动的onCreate方法中,我调用 getActionBar()
来设置我的操作栏 . 这在Android 3.2模拟器上运行时工作正常,但在使用Android 3.0和3.1时, getActionBar()
方法返回null .
我发现这非常奇怪,我看不出有什么理由会这样做 . 这是模拟器的错误还是我需要做的事情,以确保我的应用程序有一个操作栏?
SOLUTION: 我想我使用setContentView来设置活动的布局 . 相反,我使用 fragmentTransaction.add(android.R.id.content, mFragment, mTag)
向活动添加片段 . 这在3.2中运行良好,但在早期的蜂窝版本中,如果不在 onCreate()
方法中使用setContentView,则操作栏显然未设置 . 所以我通过在 onCreate()
方法中使用 setContentView()
方法修复它,并为其提供包含空FrameLayout的布局 . 我仍然可以像以前一样使用 fragmentTransaction.add(android.R.id.content, mFragment, mTag)
方法 .
这不是最漂亮的修复,但它确实有效 .
23 回答
可以使用
getSupportActionBar()
而不是getActionBar()
方法 .如果您使用的是支持库
使用getSupportActionBar()而不是getActionBar()
*更新:
现在不推荐使用ActionBarActivity类:
我建议使用:
在活动呈现其视图之前,您必须将窗口类型定义为操作栏 .
使用
在调用setContentView()方法之前 .
我遇到了上述问题,其中
getActionBar()
方法返回null . 在设置setContentView()
之后我正在调用getActionBar()
并仍然返回null
.我通过在Android Manifest文件中设置最初缺少的min-sdk版本来解决此问题 .
<uses-sdk android:minSdkVersion="11" />
公共类HomeActivity扩展AppCompatActivity {
那么你应该使用 android.support.v7.app.ActionBar
公共类HomeActivity扩展FragmentActivity {
那么你应该使用 android.app.ActionBar
公共类HomeActivity扩展ActionBarActivity {
你应该使用 android.support.v7.app.ActionBar
ActionBar需要应用程序或活动的主题才能拥有应用程序 Headers . 确保您没有将您的应用程序或活动设置为Theme.NOTITLE .
这个答案很晚,但可能对从谷歌来的任何人都有所帮助:你可能需要申报
在你的
styles.xml
. 似乎false
可以是默认值 . 您还需要使用API 11或更高版本 .更多细节可以在文档here中找到 . 具体来说,引用:
然后
然后用
我有同样的问题,其中一个解决方案是在调用
getActionBar()
之前使用setContentView()
.但还有另一件事可以解决这个问题 . 我为应用程序指定了主题
@android:style/Theme.Holo.Light
.我认为可以使用任何主题,其中包含
<item name="android:windowActionBar">true</item>
.主要原因是使用不支持ActionBar的主题:
在清单文件中,在目标活动或应用程序元素中添加以下内容(如果要在整个应用程序中统一主题)
支持操作栏
"Theme.AppCompat.Light"
或"Theme.Holo.Light"
的主题示例...最好将所有样式放在
styles.xml
中并使用"@style/themName"
在任何地方使用它,所以前一个将是和styles.xml将具有以下内容:
提示:
在SDK版本14之前,有些主题无法在旧版SDK中使用,例如
"@android:style/Theme.Holo.Light.DarkActionBar"
.要允许您的应用支持最低特定版本的SDK,您可以在
<app>
元素下添加以下内容:我遇到了这个问题 . 我正在检查版本号并仅在它大于或等于Honeycomb时启用操作栏,但它返回null . 我找到了原因和根本原因是因为我在values-v11文件夹下的style.xml中禁用了Holo主题样式 .
转到AndroidManifest.xml并替换
机器人:主题= “@风格/ AppTheme”
机器人:主题= “@安卓风格/ Theme.Holo.Light.DarkActionBar”
使用getSupportActionBar()而不是getActionBar()
在我的情况下,我在我的代码中有这个不起作用:
然后我玩了代码的顺序:
它奏效了!
结论:requestWindowFeature应该是你在onCreate方法中调用的第一件事 .
我想要添加的一件事就是我刚刚遇到这个问题,如果你想在一个有父类的Activity上尝试getActionBar(),它将返回null . 我正在尝试重构我的Activity包含在ActivityGroup中的代码,在查看ActionBar如何在源代码中创建的源代码后,我花了好几分钟去“哦duh” .
我遇到过同样的问题 . 它通过在styles.xml中查找App主题来解决
之前
后
我通过这个改变来解决它:
改变minifest
android:theme="@android:style/Theme.Holo.Light" >
添加到类
extends ActionBarActivity
将导入添加到类
import android.support.v7.app.ActionBarActivity
我知道我在这个问题上已经迟到了(并且刚接触Android),但是我发现这里的信息非常有用,并且我认为我应该添加自己的努力的结果,让ActionBar工作,因为我希望以防万一像我这样的人来寻求帮助 .
我有一个小部件,它是一个没有窗口 Headers 的浮动窗口 . 我使用样式主题来实现
android:windowIsFloating
,android:backgroundDimEnabled
和android:windowNoTitle
. 小部件工作正常,直到我想添加一个调用带有多个列表片段页面的片段分页器并使用ActionBar的按钮 . 它将在具有空指针异常的寻呼机活动上崩溃 . 我把它缩小到ActionBar为空 . 根据以前为这个线程做出贡献的人的调查结果,我从清单文件中删除了我的主题,ActionBar工作正常但现在我的窗口现在更长时间浮动(它是全屏)并且它有一个我不想要的页面 Headers .进一步的研究把我带到了Styles and Themes API Training Guide,这让我找到了解决方案 . 我发现在将清单文件应用到应用程序之前,我可以将自定义主题添加到清单文件中的各个活动 . 我的所有窗户现在都有所需的外观 .
尝试从ActionBarActivity扩展Activity类 . 这解决了我 . 执行以下操作:
在我的例子中,该类仅从Activity扩展 .
这也可以帮助一些人 .
就我而言,这是因为我没有在menu.xml中定义上下文
试试这个:
而不是这个:
只需通过命令单击检查源代码的实现:
requestWindowFeature(Window.FEATURE_ACTION_BAR);解决了我的问题,因为我看到requestWindowFeature(Window.FEATURE_ACTION_BAR)失败了;代码是开源使用它!!
要添加到其他答案:
确保在调用
getActionBar()
之前在onCreate()
方法中调用setActionBar()
或setSupportActionBar()
:在activity.xml中定义一些工具栏,然后在onCreate()中定义:
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
工作很快