185

私は奇妙な問題を抱えています。私はtargetsdk 13でアプリを作っています。

メイン アクティビティの onCreate メソッドgetActionBar()で、アクションバーをセットアップするために呼び出します。これは、Android 3.2 エミュレーターで実行している場合は正常に機能しますが、Android 3.0 および 3.1 を使用している場合、getActionBar()メソッドは null を返します。

私はこれが非常に奇妙だと思うし、そうする理由が見当たらない。これはエミュレーターのバグですか、それともアプリケーションにアクションバーがあることを確認するために何かする必要がありますか?

解決策: この問題の解決策を見つけたと思います。アクティビティのレイアウトを設定するために setContentView を使用していませんでした。代わりにfragmentTransaction.add(android.R.id.content, mFragment, mTag)、フラグメントをアクティビティに追加するために使用していました。これは 3.2 では正常に機能しましたが、以前のハニカム バージョンでは、メソッドで setContentView を使用しないとアクション バーが設定されないようですonCreate()setContentView()そのため、メソッド内のメソッドを使用しonCreate()、空の FrameLayout を含むレイアウトを提供するだけで修正しました。fragmentTransaction.add(android.R.id.content, mFragment, mTag)以前と同じようにメソッドを使用できます。

それは最も美しい修正ではありませんが、機能します。

4

24 に答える 24

37
  1. android.support.v7.app.AppCompatActivityを使用している場合

    public class HomeActivity は AppCompatActivity を拡張します {

次に、 android.support.v7.app.ActionBarを使用する必要があります

  ActionBar ab = getSupportActionBar();
  1. android.support.v4.app.FragmentActivityを使用している場合

    public class HomeActivity extends FragmentActivity {

次に、 android.app.ActionBarを使用する必要があります

    ActionBar ab = getActionBar();
  1. android.support.v7.app.ActionBarActivityを使用している場合

    public class HomeActivity extends ActionBarActivity {

android.support.v7.app.ActionBarを使用する必要があります

   ActionBar ab = getSupportActionBar();
于 2016-01-27T03:35:35.383 に答える
35

アクティビティがビューをレンダリングする前に、ウィンドウ タイプをアクションバーとして定義する必要があります。

使用する

requestWindowFeature(Window.FEATURE_ACTION_BAR);

setContentView() メソッドを呼び出す前。

于 2013-08-26T14:33:52.773 に答える
31

getActionBar()メソッドがnullを返す上記の問題に直面しました。getActionBar()を設定した後に を呼び出していましたがsetContentView()、それでも を返しますnull

最初に欠落していた Android マニフェスト ファイルの min-sdk バージョンを設定することで、問題を解決しました。 <uses-sdk android:minSdkVersion="11" />

于 2011-10-18T15:56:37.507 に答える
28

ActionBar にアプリのタイトルを付けるには、アプリケーションまたはアクティビティのテーマが必要です。アプリケーションまたはアクティビティを Theme.NOTITLE としてスタイル設定していないことを確認してください。

<application
    android:name="com.xxx.yyy"
    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 in your code
        android:windowSoftInputMode="adjustResize|stateHidden" > 
于 2013-06-11T11:10:33.180 に答える
19
import android.support.v7.app.AppCompatActivity;

それから

extends AppCompatActivity

次に使用します

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
于 2016-08-19T06:51:14.410 に答える
18

この回答は遅れていますが、Google から到着した人には役立つかもしれません。宣言する必要があるかもしれません

<item name="android:windowActionBar">true</item>

あなたのstyles.xmlfalseデフォルトにできるようです。また、API 11 以降を使用する必要があります。

詳細については、こちらのドキュメントを参照してください。具体的には、引用:

ヒント: アクション バーを削除したいカスタム アクティビティ テーマがある場合は、android:windowActionBar スタイル プロパティを false に設定します。ただし、テーマを使用してアクション バーを削除すると、ウィンドウはアクション バーをまったく許可しないため、後で追加することはできません。getActionBar() を呼び出すと null が返されます。

于 2013-06-22T02:23:21.773 に答える
11

私は同じ問題を抱えていましたが、解決策の1つは、setContentView()呼び出す前に使用することgetActionBar()でした。

しかし、問題を解決する別のことがありました。アプリケーションのテーマを に指定しました@android:style/Theme.Holo.Light

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light" >
    ...
</application>

含まれているテーマは何でも使用できると思います<item name="android:windowActionBar">true</item>

于 2014-10-03T09:31:45.157 に答える
10

その主な理由は、ActionBar をサポートしていないテーマを使用していることです。

マニフェスト ファイルで、ターゲット アクティビティまたはアプリケーション要素のいずれかに次を追加します (アプリケーション全体でテーマを統一する場合)。

アクションバーをサポートしているテーマの例 "Theme.AppCompat.Light"または"Theme.Holo.Light"...

android:theme="@android:style/Theme.Holo.Light"

すべてのスタイルを入れstyles.xmlてどこでも使用することをお勧めし"@style/themName"ます。

android:theme="@style/AppTheme"

そして、styles.xml には以下が含まれます。

 <style name="AppTheme" parent="Theme.AppCompat.Light">

ヒント:

  • "@android:style/Theme.Holo.Light.DarkActionBar"SDK バージョン 14 より前ではサポートされていないなど、古い SDK では使用できないテーマがいくつかあります。
  • アプリが SDK の特定の最小バージョンをサポートできるようにするには、<app>要素の下に次を追加します。

    <uses-sdk android:minSdkVersion="14" />
    
  • AndroidStudio で最小 SDK バージョンを指定するには、アプリの Gradle ファイルを使用できます。

    android{
      defaultConfig{
        minSdkVersion 14
        targetSdkVersion 21
      }
    }
    
于 2015-01-31T12:09:06.547 に答える
8

この問題に遭遇しました。バージョン番号を確認し、それが Honeycomb 以上の場合にのみアクション バーを有効にしていましたが、null が返されていました。その理由と根本的な原因は、values-v11 フォルダーの下の style.xml で Holo テーマ スタイルを無効にしたことでした。

于 2013-04-08T17:27:08.573 に答える
4

私の場合、コードにこれがありましたが、機能しませんでした:

@Override
protected void onCreate(Bundle savedInstanceState) {
    context = getApplicationContext();

    requestWindowFeature(Window.FEATURE_ACTION_BAR);

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
}

次に、コードの順序で遊んだ:

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_ACTION_BAR);

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    context = getApplicationContext();
}

そしてそれは働いた!

結論: requestWindowFeature は onCreate メソッドで最初に呼び出す必要があります。

于 2015-03-21T17:51:08.010 に答える
2

親を持つアクティビティで getActionBar() を実行しようとすると、null が返されます。アクティビティが ActivityGroup 内に含まれているコードをリファクタリングしようとしていますが、ソースで ActionBar がどのように作成されるかのソースを見た後、「まあまあ」になるのに数分かかりました。

于 2012-02-28T16:55:02.580 に答える
0

これはまた、一部の人々を助けるかもしれません。

私の場合は、menu.xml でコンテキストを定義していなかったことが原因でした。

これを試して:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.android.ActionBarActivity">

これの代わりに:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
于 2015-02-24T11:01:18.830 に答える
0

ActionBarActivity から Activity クラスを拡張してみてください。これで解決しました。次のようにします。

public class MyActivity extends ActionBarActivity
{
  . . .

私の場合、クラスは Activity からのみ拡張されていました。

于 2014-12-16T22:51:45.683 に答える
0

私はこの質問でパーティーに遅れている(そしてAndroidに慣れていない)ことを知っていますが、ここの情報は非常に役立つことがわかり、私のような他の人が来た場合に備えて、ActionBarを希望どおりに機能させるという私自身の努力の結果を追加する必要があると考えました助けを求めています。

ウィンドウ タイトルのないフローティング ウィンドウであるウィジェットがあります。android:windowIsFloatingandroid:backgroundDimEnabledおよびを実装するためにスタイル テーマを使用しandroid:windowNoTitleます。ウィジェットは、いくつかのリスト フラグメント ページでフラグメント ページャーを呼び出し、ActionBar を使用するボタンを追加するまでは問題なく動作していました。ページャー アクティビティでヌル ポインター例外が発生してクラッシュします。ActionBar が null になるように絞り込みました。このスレッドに貢献した以前の人々の調査結果に従って、マニフェスト ファイルからテーマを削除したところ、ActionBar は正常に動作しましたが、ウィンドウがフロートしなくなり (全画面表示)、望ましくないページ タイトルが表示されました。

さらに調査した結果、Styles and Themes API Training Guideにたどり着き、解決策にたどり着きました。アプリケーションに適用する前に、マニフェスト ファイル内の個々のアクティビティにカスタム テーマを追加できることを発見しました。すべてのウィンドウが目的の外観になりました。

于 2013-07-09T02:57:29.490 に答える