25

调用getActionBar返回null。这经常被报道,所以我确保包括其他人使用的解决方案:我的minSdkVersion=11,我有一个标题栏,我在getActionBar之后打电话setContentView。另外,我的活动不是儿童活动。

setContentView(R.layout.main);

// experiment with the ActionBar 
ActionBar actionBar = getActionBar();
actionBar.hide();

设备是运行 Android 3.2 的三星 Galaxy Tab 10.1

提前感谢您的任何想法或建议!

4

14 回答 14

59

看来您需要通过主题或以下代码请求具有操作栏(!= 标题栏)。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // The Action Bar is a window feature. The feature must be requested
    // before setting a content view. Normally this is set automatically
    // by your Activity's theme in your manifest. The provided system
    // theme Theme.WithActionBar enables this for you. Use it as you would
    // use Theme.NoTitleBar. You can add an Action Bar to your own themes
    // by adding the element <item name="android:windowActionBar">true</item>
    // to your style definition.
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

    setContentView(R.layout.main);

    // experiment with the ActionBar 
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}

[这里]的代码

于 2012-04-05T15:21:07.527 回答
11

似乎需要满足几个条件才能使其起作用。让我难过很久的是这个:

确保您的活动扩展了活动(不是 ActionBarActivity)。

public class MagicActivity extends Activity

确保您的应用清单具有类似的内容

<application
    ...
    android:theme="@android:style/Theme.Holo" >

并确保您的活动布局有

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ....
    android:theme="@android:style/Theme.WithActionBar" >

-标记

于 2014-11-17T13:29:56.020 回答
10

我似乎通过用getSupportActionBar()切换getActionBar()解决了我的所有错误。我尝试了不同的主题,添加了getWindow().requestFeature(Window.FEATURE_ACTION_BAR); ,确保 setContentView(view) 是第一个,所有其他的东西都是之前看到的。

于 2014-11-25T07:30:42.130 回答
8

操作栏需要带有应用标题的主题或活动。确保您没有将您的应用程序或活动设置为 Theme.NOTITLE。

<application
    android:name="com.xxx.yyy.Application"
    android:debuggable="false"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code


<activity
        android:name="com.xxx.yyy.Activity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:theme="@style/Theme.NoTitle"  // remove this line if you have this in your code
        android:windowSoftInputMode="adjustResize|stateHidden" > 
于 2013-06-11T11:13:24.943 回答
4

我试图使用支持库从 ActionBarActivity 的片段中获取 ActionBar。我不得不这样做:

ActionBarActivity actionBarActivity = (ActionBarActivity)getActivity();
ActionBar actionBar = actionBarActivity.getSupportActionBar();

我的下一个任务是弄清楚如何使这个通用化。例如,这段代码感觉很脏,因为它要求我的 Fragment 知道它正在被 ActionBarActivity 使用并使用支持库。我认为它应该是一种方法,getActivity().getActionBar()如果父 Activity 不是 ActionBarActivity,则首先检查然后上面的代码捕获 ClassCastException。

于 2014-11-05T18:18:44.243 回答
2

如果为 API14 或更高版本创建应用程序项目,将有一个 values-14 文件夹。确保该文件夹存在并且它有一个 styles.xml 文件,其中包含:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <!-- API 14 theme customizations can go here. -->
</style>

我收到此错误是因为我创建了一个新项目并且我不想在我的项目中添加任何额外的值文件夹,所以我只保留了值文件夹并删除了 values-v11 和 values-v14 文件夹。但显然,如果您想使用 ActionBar,API14 及更高版本的默认主题需要在其父 XML 标记中包含一个 ActionBar。所以我认为我可能做错了!希望这可以帮助某人。不过,您最有可能通过上述答案解决您的问题。

于 2014-11-04T17:41:06.570 回答
2

这解决了我的问题:

android.support.v7.app.ActionBar ab = getSupportActionBar();
于 2016-07-01T11:26:54.697 回答
1

真正的答案应该是@zapl 和@Himanshu Virmani 的结合

对于 Android 清单:

<application
    android:name="com.xxx.yyy.Application"
    android:debuggable="false"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/Theme.NoTitle"> // remove this line if you have this in your code


<activity
        android:name="com.xxx.yyy.Activity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:theme="@style/Theme.NoTitle"  // remove this line if you have this in your code
        android:windowSoftInputMode="adjustResize|stateHidden" > 

对于活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // The Action Bar is a window feature. The feature must be requested
    // before setting a content view. Normally this is set automatically
    // by your Activity's theme in your manifest. The provided system
    // theme Theme.WithActionBar enables this for you. Use it as you would
    // use Theme.NoTitleBar. You can add an Action Bar to your own themes
    // by adding the element <item name="android:windowActionBar">true</item>
    // to your style definition.
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    setContentView(R.layout.activity_main);
    // Hide the status bar for Android 4.1 and higher
    View decorView = getWindow().getDecorView();
    // Hide the status bar.
    int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    decorView.setSystemUiVisibility(uiOptions);
    // Remember that you should never show the action bar if the
    // status bar is hidden, so hide that too if necessary.
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}
于 2014-05-19T06:48:56.703 回答
1

确保您扩展 ACTIONBARACTIVITY 而不是 ACTIVITY 这应该可以解决您的问题

于 2014-11-18T05:46:23.897 回答
1

只需更改两件事 1) 清单文件编辑 android:theme="@android:style/Theme.Holo" >

2) 片段文件添加 android:theme="@android:style/Theme.WithActionBar"

于 2015-05-21T09:27:40.063 回答
1

更改系统请求的顺序:

@Override
protected void onCreate(Bundle savedInstanceState) {

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);

    super.onCreate(savedInstanceState);    
    setContentView(R.layout.main);

    // experiment with the ActionBar 
    ActionBar actionBar = getActionBar();
    actionBar.hide();
}
于 2015-07-27T13:01:28.803 回答
0

步骤 01:

改变你的班级家长。活动到 AppCompatActivity

IE:

public class BluetoothActivity extends AppCompatActivity {
//Your Code
}

步骤02:

如下创建一个全局变量。(我正在使用 androidx。所以这就是导入的样子)

androidx.appcompat.app.ActionBar actionBar;

步骤 03:

如下使用深色操作栏。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Your style -->
</style>

步骤04:

分配 getSupportActionBar(); 到变量,您在onCreate方法中创建为全局变量。

setContentView(R.layout.activity_bluetooth);
actionBar = getSupportActionBar(); //Create this After setContentView
actionBar.show(); //this is for Experimental process only

步骤 05:

现在你可以用你的 actionBar 做任何你想做的事

IE

actionBar.setTitle("Profile");
于 2020-01-10T19:01:26.407 回答
0

也许你的活动风格是基于 NoActionBar

于 2017-11-02T15:36:18.837 回答
0

如果您正在开发一个以 sdk>=14 为目标的应用程序,并且您正在扩展 AppCompat 以支持以前版本中的 Material 主题。当您想像后退按钮一样隐藏操作栏中的项目时,您需要执行以下操作:在您的活动中(而不是在片段类中)如果您将使用 getActionBar(),它将返回 null。如 Appsupport 主题 getSupportAcionBar() 将返回操作栏。

如果您想从DevByte关注,这里是链接

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_detail);
    getSupportActionBar().setDisplayHomeAsUpEnabled(false);




}
于 2015-09-12T21:33:30.483 回答