1. ホーム
  2. android

[解決済み] このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。

2022-02-06 23:14:59

質問内容

Android Studio 0.4.5

カスタムダイアログボックスを作成するためのAndroidドキュメントです。 http://developer.android.com/guide/topics/ui/dialogs.html

カスタムダイアログが必要な場合は、ダイアログAPIを使う代わりに、アクティビティをダイアログとして表示させることができます。単にアクティビティを作成し、そのテーマを その <activity> マニフェスト要素を使用します。

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

しかし、これを試したところ、次のような例外が発生しました。

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

下記をサポートしているのですが、minに10より大きいものを使うことができません。

minSdkVersion 10
targetSdkVersion 19

私のスタイルでは、次のようになっています。

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

そして、マニフェストには、アクティビティとして次のようなものがあります。

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:theme="@android:style/Theme.Holo.Light.Dialog"
            android:name="com.ssd.register.Dialog_update"
            android:label="@string/title_activity_dialog_update" >
        </activity>

このようにダイアログボックスを作成することは、すでにレイアウトが完成しているので、ホッとしていたことでした。

どなたか、この問題を回避する方法を教えてください。

どのように解決するのですか?

この問題が発生する理由は、ダイアログテーマを適用しようとしているアクティビティが、拡張された ActionBarActivity を必要とし、そのため AppCompat というテーマが適用されます。

更新情報 : エクステンション AppCompatActivity にもこの問題があります。

この場合、Javaの継承を ActionBarActivity から Activity で、マニフェストのダイアログテーマはそのままにして、非表示の Theme.AppCompat


一般的なルールとして、古いバージョンのAndroidに対応させたい場合は、コードに AppCompat をテーマとし、Java コードは AppCompatActivity . Android の最新バージョンや機能にしか興味がないなど、このサポートを必要としない *アクティビティがある場合は、任意のテーマを適用することができますが、Java コードは古いプレーンな *アクティビティを継承しなければなりません。 Activity .


注意: AppCompatActivity (またはそのサブクラス。 ActionBarActivity から Activity また、quot;support" を持つ様々な呼び出しを、対応する呼び出しに変更する必要があります。 なし "support"です。 そのため、代わりに getSupportFragmentManager を呼び出します。 getFragmentManager .