83

このandroid.util.AndroidRuntimeException: requestFeature() must be called before adding contentエラーが発生しています。以下のコードでわかるように、行はコード行のrequestWindowFeature(Window.FEATURE_NO_TITLE);前にsetContentView(R.layout.mainmenu);あります。この onCreate() コードは、ほぼすべてのアクティビティで同じ形式であり、これまで問題が発生したことはありません。ADT 22 に更新して以来、多くのランダム エラーがあらゆる場所で発生しています。私はこれらのエラーの多くを取り除きましたが、これが私の最新のものです。

このエラーを修正するにはどうすればよいですか?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.mainmenu);

LogCat

05-31 04:20:43.121: E/AndroidRuntime(14559): FATAL EXCEPTION: main
05-31 04:20:43.121: E/AndroidRuntime(14559): java.lang.RuntimeException: Unable to start activity ComponentInfo{matt.lyons.bibletrivia.lite/matt.lyons.bibletrivia.lite.MainMenu}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.os.Looper.loop(Looper.java:137)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at java.lang.reflect.Method.invokeNative(Native Method)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at java.lang.reflect.Method.invoke(Method.java:511)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at dalvik.system.NativeStart.main(Native Method)
05-31 04:20:43.121: E/AndroidRuntime(14559): Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
05-31 04:20:43.121: E/AndroidRuntime(14559):    at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:229)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.Activity.requestWindowFeature(Activity.java:3244)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at matt.lyons.bibletrivia.lite.MainMenu.onCreate(MainMenu.java:28)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.Activity.performCreate(Activity.java:5104)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-31 04:20:43.121: E/AndroidRuntime(14559):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
05-31 04:20:43.121: E/AndroidRuntime(14559):    ... 11 more
4

12 に答える 12

188

私もこの問題に直面しましたが、super.onCreate()を呼び出す前にウィンドウ リクエストを呼び出すと、問題は解決しました。

@Override
public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainmenu);
}

これがあなたを助けることを願っています... :)


編集済み:Androidの新しいバージョンの他の可能な解決策について

Android 4.0 以下でステータス バーを非表示にする

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

活動テーマを使用する利点は次のとおりです。

  • プログラムでフラグを設定するよりも、保守が容易で、エラーが発生しにくくなります。
  • アプリのメイン アクティビティをインスタンス化する前に、UI をレンダリングするために必要な情報がシステムにあるため、UI の移行がスムーズになります。

Android のバージョンは Jellybean より低い

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // If the Android version is lower than Jellybean, use this call to hide
    // the status bar.
    if (Build.VERSION.SDK_INT < 16) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
    setContentView(R.layout.activity_main);
}

Android 4.1 以降でステータス バーを非表示にする

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();

次の点に注意してください。

  • UI フラグがクリアされると (たとえば、アクティビティから移動することによって)、バーを再び非表示にする場合は、アプリでそれらをリセットする必要があります。アプリがそれに応じて応答できるように、UI の可視性の変更をリッスンする方法については、 UI の可視性の変更への対応を参照してください。
  • UI フラグを設定する場所によって違いが生じます。アクティビティの onCreate() メソッドでシステム バーを非表示にし、ユーザーがホームを押すと、システム バーが再び表示されます。ユーザーがアクティビティを再度開くと、onCreate() は呼び出されないため、システム バーは表示されたままになります。ユーザーがアクティビティに出入りするときにシステム UI の変更を維持したい場合は、onResume() または onWindowFocusChanged() で UI フラグを設定します。
  • メソッド setSystemUiVisibility() は、呼び出し元のビューが表示されている場合にのみ効果があります。
  • ビューから移動すると、setSystemUiVisibility() で設定されたフラグがクリアされます。
于 2013-06-05T12:28:10.857 に答える
14

使用時にその例外(android.util.AndroidRuntimeException: requestFeature() must be called before adding content)が発生しました

requestWindowFeature(Window.FEATURE_NO_TITLE);

Android 2.3.5 (Gingerbread) を実行している古いデバイスで。v7 サポート ライブラリを使用しています。

使用するように変更すると、エラーが修正されました:

supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

(これは、修正での私の super.onCreate 呼び出しの後にも発生します)。https://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#supportRequestWindowFeature(int)のドキュメントを参照してください。

したがって、何よりも誤解を招くエラーメッセージの場合があります.

于 2014-08-12T09:48:31.193 に答える
7

クラスが Activity または ActionBarActivity から拡張されていることを確認してください。ActionBarActivity を使用している場合は、Activity を使用してください。

于 2015-04-20T14:01:18.830 に答える
7

アクティビティをダイアログとして (Theme.Dialog を使用して) 使用している場合は、必ず ActionBarActivity (Android Studio ウィザードで指定されたデフォルト) ではなくアクティビティを拡張してください。次に、使用できます

requestWindowFeature(Window.FEATURE_NO_TITLE);

また

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

super.onCreate()...

于 2015-02-26T05:12:40.910 に答える
2

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowActionBar">false</item>

    </style>

このようにスタイルを設定するだけで、コーディング側の変更は必要ありません。

于 2016-02-03T05:18:03.087 に答える
0

これを行う最も簡単な方法は、以下のコードを使用することだと思います

  getActionBar().setTitle(null);
于 2016-08-19T09:15:50.003 に答える
0

あなたの行を置き忘れました: super.onCreate(savedInstanceState);

この方法を使用します。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_qrscanner);
于 2019-07-31T05:23:40.833 に答える
0

次のオプションを試してください。少なくとも 1 つが機能するはずです。

  1. DialogFragment を使用している場合は、両方のメソッドonCreateDialog(..)をオーバーライドしないonCreateView(..) ようにしてください (この変更は私にとってはうまくいきました)

  2. アクティビティのsupportRequestWindowFeature(Window.FEATURE_NO_TITLE)/requestWindowFeature(Window.FEATURE_NO_TITLE)前後に試すsetContentView(..)super.onCreate(..);

  3. 事前にオプション 2 を試すsuper.onCreate(..);

于 2019-02-15T18:26:10.083 に答える