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

Android Studio 0.4.5

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

カスタムダイアログが欲しい場合、Dialog APIを使わずに、アクティビティをダイアログとして表示することができます。アクティビティを作成して、そのテーマをTheme.Holo.Dialogに設定するだけです。 マニフェスト要素でテーマをTheme.Holo.Dialogに設定します。

<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に変更する際には、"support "を含む様々なコールを、"support "を含まない対応するコールに変更する必要があります。 つまり、getSupportFragmentManagerの代わりに、getFragmentManagerを呼び出します。

解説 (25)

最小のSDKは10です。ActionBar "はapiレベル11から利用可能です。つまり、10の場合は、サポートライブラリのAppCompatを使用することになり、そのためにはTheme.AppCompatまたはその子孫を使用する必要があります。

使用方法

android:theme="@style/Theme.AppCompat" >

また、上部にアクションバーを設置したくない場合は

android:theme="@style/Theme.AppCompat.NoActionBar">

詳細はこちら

http://developer.android.com/guide/topics/ui/actionbar.html

Edit:

私はop記事を読み違えたかもしれません。

作者はアクティビティをテーマにしたダイアログを望んでいるようです。そこで、Bobbake4さんがすでに提案されているように、ActionBarActivityではなく、Activityを拡張してみましょう。

また、以下のリンクでDialog Attributesを見てみてください。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/

解説 (8)

注:これは回答のつもりだったのですが、さらにテストしたところ、コマンドラインからmavenを使ってビルドするとまだ失敗することがわかりましたので、問題点として編集することにしました! :-(

私の場合、このエラーが出たときにはすでにAppCompat Themeを使用していたので、このエラーはあまり意味がありませんでした。

私はアンドロイドのビルドをmavenizeしている最中でした。AppCompatのapklibとjarバージョンにすでに依存していました。



            android.support
            compatibility-v7-appcompat
            ${compatibility.version}
            apklib



            android.support
            compatibility-v7-appcompat
            jar



            android.support
            compatibility-v7
            jar



            android.support
            compatibility-v4

さて、mavenプロジェクトをインポートして、IntelliJからビルドして実行すると、うまくいきます。

しかし、ビルドしてデプロイし、コマンドラインからmavenを使って実行すると、やはりこの例外が発生します。

解説 (0)