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
を呼び出します。
最小の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を見てみてください。
注:これは回答のつもりだったのですが、さらにテストしたところ、コマンドラインからmavenを使ってビルドするとまだ失敗することがわかりましたので、問題点として編集することにしました! :-(
私の場合、このエラーが出たときにはすでにAppCompat Themeを使用していたので、このエラーはあまり意味がありませんでした。
私はアンドロイドのビルドをmavenizeしている最中でした。AppCompatのapklibとjarバージョンにすでに依存していました。
<!-- See https://github.com/mosabua/maven-android-sdk-deployer -->
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<version>${compatibility.version}</version>
<type>apklib</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v4</artifactId>
</dependency>
さて、mavenプロジェクトをインポートして、IntelliJからビルドして実行すると、うまくいきます。
しかし、ビルドしてデプロイし、コマンドラインからmavenを使って実行すると、やはりこの例外が発生します。