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

1050
ant2009 2014-02-17 07:34.

Android Studio 0.4.5

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

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

私は以下をサポートしていますが、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>

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

誰かが私がこの問題を回避する方法を教えてもらえますか?

30 answers

1141
Bobbake4 2014-02-17 07:48.

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

更新:拡張 AppCompatActivityするとこの問題も発生します

この場合、Javaの継承をからActionBarActivityに変更しActivity、ダイアログテーマをマニフェストにそのまま残しTheme.AppCompatます。値はありません。


一般的なルールとして、コードで古いバージョンのAndroidをサポートする場合は、AppCompatテーマを設定し、Javaコードを拡張する必要がありAppCompatActivityます。* Androidの最新バージョンと機能のみを気にするなど、このサポートを必要としないアクティビティがある場合は、任意のテーマを適用できますが、Javaコードはプレーンオールドを拡張する必要がありActivityます。


注:(AppCompatActivityまたはサブクラス、ActionBarActivity)からActivity、に変更する場合は、「support」を使用するさまざまな呼び出しを「support」を使用しない対応する呼び出しに変更する必要があります。したがって、の代わりにgetSupportFragmentManager、を呼び出しますgetFragmentManager

555
iusting 2014-09-05 00:44.

あなたがする必要があるのはandroid:theme="@style/Theme.AppCompat.Light"AndroidManifest.xmlファイルのアプリケーションタグに追加することだけです。

284
A.K. 2015-09-04 00:43.

私は同じ問題を抱えていたので、上記のコメントの@MarkKeenから回答をコピーしました。

投稿の上部にエラーが表示され、アラートダイアログを追加した後に発生しました。マニフェストに関連するすべてのスタイル情報があります。私の問題は、アラートビルダーでコンテキスト参照を変更することで解決しました-私は変更しました:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

に:

new android.support.v7.app.AlertDialog.Builder(this)

そして、これ以上の問題はありません。

116
Darush 2016-10-22 10:27.

次のようなアプリケーションコンテキストを使用している場合:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

次のようなアクティビティコンテキストに変更します。

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
114
Raghunandan 2014-02-17 07:36.

min sdkは10ActionBarです。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

編集:

oppostを読み間違えた可能性があります。

opはアクティビティテーマのダイアログを望んでいるようです。したがって、Bobbake4によってすでに提案されているように、のActivity代わりに拡張しますActionBarActivity

以下のリンクの@ダイアログ属性もご覧ください

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

48
Geraldo Neto 2016-04-29 19:10.

私のテーマがAppCompatテーマであり、私のアクティビティがAppCompatActivity(またはActivity、他の回答で示唆されているように)であったにもかかわらず、この問題が発生していました。そこで、プロジェクトをクリーンアップ、再構築、再実行しました。

ビルド->プロジェクトのクリーンアップ;ビルド->プロジェクトの再構築;実行->実行

馬鹿げているように見えるかもしれませんが、今ではうまく機能しています!

それが役立つことを願っています!

27
k29 2015-01-15 11:37.

これが私にとってそれを修正したものです:マニフェストでテーマを指定する代わりにonCreate、拡張する各アクティビティに対してそれを定義しましたActionBarActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

これMyAppThemeはの子孫でありTheme.AppCompat、xmlで定義されています。テーマは前に設定しなければならないことに注意してくださいsuper.onCreatesetContentView

23
Yamen Nassif 2014-12-04 00:45.

あなたのスタイルに行き、親を置きます

parent="Theme.AppCompat"

の代わりに

parent="@android:style/Theme.Holo.Light"
17
sharma_kunal 2016-10-01 18:26.

目的のアクティビティのテーマを変更します。これは私のために働きます:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />
16
Ali Gürelli 2016-06-23 23:04.

私の場合、resディレクトリにvalues-v21ファイルがありません。次に、それを作成し、次のコードを追加しました。

  <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>
</style>
14
goRGon 2015-04-29 14:08.

アクティビティでTheme.AppCompatを使用したにもかかわらず、Samsungデバイスでこのようなクラッシュが発生しました。根本的な原因は、Samsung側の奇妙な最適化に関連していました。

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

私の解決策はただ削除することでした android:launchMode="singleTask"

14
Ali Akram 2018-06-28 00:37.

ただやる

new AlertDialog.Builder(this)

の代わりに

new AlertDialog.Builder(getApplicationContext())
13
JonasOliveira 2015-05-04 12:10.

ActionBarActivityを拡張する必要がある場合は、style.xmlで必要です。

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

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

あなたはアンドロイドのように、アプリケーションのメインテーマとして設定した場合:代わりのTheme.Material.Light AppTheme.Baseエラー:「この活動であなたがTheme.AppCompatのテーマ(または子孫)を使用する必要がありIllegalStateExceptionが」あなたが得られます。

12
Marc Baduq 2016-03-09 05:30.

同じ問題が発生しましたが、これをマニフェストに配置すると解決しました:android:theme = "@ style /Theme.AppCompat。

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>
10
Vitaliy A 2018-07-29 08:50.

私の場合、Dialogを表示しようとすると、このような問題が発生しました。問題はコンテキストにありました。理論的にはアクティビティコンテキストを返すはずのgetBaseContext()を使用しましたが、そうではないように見えます。または、テーマが適用される前にコンテキストを返します。

そのため、getBaseContexts()を「this」に置き換えたところ、期待どおりに機能するようになりました。

        Dialog.showAlert(this, title, message,....);
9
Elyas Nategh 2018-09-15 06:20.

appWidget<android:theme="@android:style/Theme.Dialog">でダイアログを表示するために使用されるテーマのアクティビティがあり、同じ問題が発生しました

以下のようにアクティビティコードを変更することで、このエラーを解決しました。

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}
8
Peter 2016-09-21 21:54.

私にとっては、ContextThemeWrapperを使用するためのソリューションでした。

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

Androidから-プログラムでFABを作成する方法は?

8
Shivam Dawar 2019-10-08 07:07.

アプリケーションやベースコンテキストではなく、新しいアラートダイアログを作成するときにアクティビティコンテキストを使用していることを確認してください。

7
danigonlinea 2014-11-28 00:11.

あなたは21に、以前のSDKのバージョンでは、あなたのテーマのスタイルで材料設計を適用したいので、あなたはこれに来ているActionBarActivity必要がありAppTheme、以前の(また、あなたのAppThemeについて、独自のカスタマイズを防ぎたいのであれば、唯一のあなたのstyles.xmlに変更する必要がありますto sdk 21)このようにして、AppCompatテーマを継承できます。

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

このため:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
7
Wraithious 2017-10-28 07:58.

私にもこの問題があり、それを修正するために何をしたか、そしてまだHoloテーマを使用することは、次の手順を実行することでした。

最初にこのインポートを置き換えました:

import android.support.v7.app.AppCompatActivity;

これで:

import android.app.Activity;

次に、拡張子を次のように変更しました。

public class MyClass extends AppCompatActivity {//...

これに:

public class MyClass extends Activity {//...

また、このインポートを変更する必要がありました。

import android.support.v7.app.AlertDialog;

このインポートへ:

import android.app.AlertDialog;

次に、アクティビティレベルのマニフェストでテーマタグを使用できます。

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

最後に、(v7 appCompatを使用する必要のある他のクラスがプロジェクトにない限り)プロジェクトをクリーンアップして再構築するか、アプリレベルでgradleビルドファイルのこのエントリを削除できます。

compile 'com.android.support:appcompat-v7:23.2.1'

プロジェクトにv7appCompatを使用する必要のある他のクラスがある場合は、プロジェクトをクリーンアップして再構築します。

6
Fazal 2015-02-02 08:32.

テーマスタイルの親をに変更します

 parent="Theme.AppCompat"

これは私のために働いた...

6
Kaloglu 2015-06-16 03:50.

そのエラーには多くの解決策があります。

  1. ActionbarActivityまたはAppCompatActivityの代わりにActivityまたはFragmentActivityを使用する必要があります

  2. ActionbarActivityまたはAppCompatActivityを使用する場合は、styles.xml Theme.Holo.xxxxTheme.AppCompat.Lightに変更する必要があります(必要に応じてDarkActionbarに追加します)。

アクションバーまたはAppCompatに関する高度な属性が必要ない場合は、ActionbarまたはAppCompatを使用する必要はありません。

6
shikha 2016-02-09 20:09.

Androidマニフェストでは、次のコードスニペットのようにアクティビティのテーマをAppThemeに変更するだけです。

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>
6
Avinash_ks 2017-03-20 20:21.

これは、フラグメントにAlertDialogが必要な場合です

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();
6
Dante 2018-01-30 02:12.

私の経験では、問題は私が会話を見せた文脈でした。ボタンをクリックして、次のようにAlertDialogをインスタンス化します。

builder = new AlertDialog.Builder(getApplicationContext());

しかし、コンテキストが正しくなく、エラーが発生しました。このようにアプリケーションコンテキストを使用して変更しました。

宣言セクション:

Context mContext;

onCreateメソッドで

mContext = this;

そして最後に、AlertDialogが必要なコードで:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

これが私にとっての解決策です。

6
Azhar osws 2017-11-18 21:34.

私はこれと同じ問題を抱えていました。カスタムナビゲーションドロワーを作成していたからです。しかし、私はこのように私のマニフェストでテーマに言及するのを忘れています

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

上記のテーマをマニフェストに追加するとすぐに、問題は解決しました。

5
user1501382 2015-04-18 20:55.

これは私のために働いた:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>
5
Md Imran Choudhury 2015-04-21 10:03.

あなたのアクティビティは、AppCompat.themeを適用する必要があるActionBarActivityを拡張しています。ActionBarActivityからActivityまたはFragmentActivityに変更すると、問題が解決します。

アクションバーを使用しない場合:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 
4
Kaloglu 2017-10-23 02:57.

迅速な解決策。

styles.xmlでベーステーマの親を変更します

から置き換える

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

<style name="AppTheme" parent="Theme.AppCompat">
3
kiran boghra 2016-08-04 01:58.

この解決策は私のために働いた。

デザインライブラリはSupportv4とAppCompatサポートライブラリに依存しているため、gradleのappcompatとデザインライブラリに異なるバージョンを使用しないでください。

使用する

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

の代わりに

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'

Related questions

MORE COOL STUFF

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする&nbsp;

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ラーム・エマニュエルがシカゴ警察の警視を解雇し、身を守る

ラーム・エマニュエルがシカゴ警察の警視を解雇し、身を守る

シカゴ市長のラーム・エマニュエルは、シカゴの警察官による17歳のラカン・マクドナルドの銃撃の失敗した取り扱いに続いて、市の警視官、ギャリーF.マッカーシーを解雇しました。

ダグ・マローネの理想的な食事は、ボローニャのサンドイッチです。

ダグ・マローネの理想的な食事は、ボローニャのサンドイッチです。

写真:ローガンボウルズ/ゲッティイメージズジャイアンツがベンマカドゥーを解雇したので、他の誰かがジムトムスラの精神的後継者でなければなりません。季節だった。ジャガーズのダグ・マローネ監督は、孤独なボローニャサンドイッチに親しみを持っていることを考えると、すでにその役割を担う有力な候補者のようです。

人々がやめる最も一般的な時間、およびプッシュスルーする方法

人々がやめる最も一般的な時間、およびプッシュスルーする方法

時には、それが副次的なプロジェクト、仕事、人間関係、または人生の他の部分であるかどうかにかかわらず、辞めることが最良の選択肢です。しかし、何かを完了するためのリソースがないため、物事が困難になったとき、タイミングが私たちに必要なように「感じ」させたときにも、私たちは辞めます。

黒人女性、あなたの内訳へようこそ

黒人女性、あなたの内訳へようこそ

著者のベニルデ・リトルは、母親の死後のうつ病との戦いを新しい回想録「Welcome toMyBreakdown」で記録しています。チェスター・トイの作家ベニルデ・リトルは、黒人女性にそれが大丈夫だと知ってもらいたいと思っています。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language