web-dev-qa-db-ja.com

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

Android Studio 0.4.5

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

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

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

この問題を回避する方法を誰かに教えてもらえますか。

848
ant2009

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

更新 AppCompatActivityを拡張してもこの問題は発生します 

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


一般的な規則として、コードにAndroidの古いバージョンをサポートさせる場合は、AppCompatテーマを使用し、JavaコードはAppCompatActivityを拡張する必要があります。あなたがこのサポートを必要としない活動、例えばあなたがAndroidの最新バージョンと機能だけを気にするような活動をしているなら、あなたはそれにどんなテーマでも適用できますがJavaコードは普通のActivityを拡張しなければなりません。


注:AppCompatActivity(またはサブクラスActionBarActivity)からActivityへの変更時には、 "support"を含むさまざまな呼び出しを対応する呼び出し without "support"に変更する必要があります。そのため、getSupportFragmentManagerの代わりにgetFragmentManagerを呼び出します。

1028
Bobbake4

Android:theme="@style/Theme.AppCompat.Light"ファイルのapplicationタグにAndroidManifest.xmlを追加するだけです。

495
iusting

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

私はエラーを投稿の上部に述べさせていただき、警告ダイアログを追加した後に起こりました。関連するスタイル情報はすべてマニフェストにあります。私の問題はalert builderのコンテキスト参照を変更することで解決しました - 私は変更しました: 

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

に: 

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

そしてもう問題はありません。

211
A.K.

min sdkは10です。ActionBarはapiレベル11から利用可能です。したがって、10の場合はTheme.AppCompatまたはその子孫を使用する必要があるサポートライブラリのAppCompatを使用します。

つかいます

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

または上部にアクションバーが必要ない場合

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

もっと詳しく

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

編集する

Opの投稿を誤解しているかもしれません。

活動テーマのダイアログが欲しいようです。そのため、Bobbake 4によって既に提案されているように、Activityの代わりにActionBarActivityを拡張します。

下のリンクの@ 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/

88
Raghunandan

これは私のために働きました、私はちょうど変えました:

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

これに:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
71
Darush

私のテーマがAppCompatテーマであり、私の活動がAppCompatActivity(または他の回答で示唆されているようにActivity)であったとしても、私はこの問題を経験していました。それで、私はプロジェクトを掃除し、再構築し、そして再実行しました。 

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

それは愚かに思えるかもしれませんが、今では 素晴らしい働きをします

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

36
Geraldo Neto

これは私にとってそれを修正したものです:マニフェストでテーマを指定する代わりに、私はonCreateを拡張するそれぞれの活動のためにActionBarActivityでそれを定義しました:

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

ここでMyAppThemeTheme.AppCompatの子孫であり、xmlで定義されています。テーマはsuper.onCreatesetContentViewの前に設定する必要があります。

24
k29

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

parent="Theme.AppCompat"

の代わりに 

parent="@Android:style/Theme.Holo.Light"
19
Yamen Nassif

私の場合、私は私の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>
16
Ali Gürelli

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

<activity
            Android:name="HomeActivity"
            Android:screenOrientation="landscape"
            Android:theme="@style/Theme.AppCompat.Light"
            Android:windowSoftInputMode="stateHidden" />
13
sharma_kunal

あなたがあなたのstyle.xmlに必要なActionBarActivityを拡張する必要があるなら:

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

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

アプリケーションのメインテーマをAndroidとして設定すると、 AppTheme.Base の代わりにTheme.Material.Lightとなります。アクティビティ」エラー。

13
JonasOliveira

アクティビティが Theme.AppCompat を使用していても、 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"を削除することでした

12
goRGon

私は同じ問題を抱えていたが、私はマニフェストにこれを置くとき、それは解決した:アンドロイド: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>
12
Marc Baduq

やるだけ

new AlertDialog.Builder(this)

の代わりに

new AlertDialog.Builder(getApplicationContext())
9
Ali Akram

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

ですから、私はgetBaseContexts()を "this"に置き換えただけで、今では期待通りに動作します。

        Dialog.showAlert(this, title, message,....);
7
Vitaliy A

私にとっては、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を作成する方法?

7
Peter

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

 parent="Theme.AppCompat"

これは私のために働きました...

6
Fazal

Androidのマニフェストでは、アクティビティのテーマをAppThemeに変更します

<activity
  Android:name=".MainActivity"
  Android:label="@string/app_name"
  Android:theme="@style/AppTheme">
</activity>
6
shikha

私もこの問題を抱えていて、私がそれを解決するためにしたこと、そしてそれでも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'

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

6
Wraithious

これはあなたがフラグメントの中に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
Avinash_ks

あなたはそのエラーに対して多くの解決策を持っています。

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

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

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

6
Kaloglu

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

<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
user1501382

ActionBarActivityActionBarActivityからActivityまたはFragmentActivityに変更するには、ActionBarActivityを適用する必要があります。問題を解く。 

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

Android:theme="@Android:style/Theme.Light.NoTitleBar.Fullscreen" 
5

以前のsdkバージョンでテーマスタイルのMaterial Designを21に適用したいので、これに来ました。あなたのAppThemeについてのあなた自身のカスタマイズを防ぎたいのならActionBarActivityAppThemesoを必要とします。この方法でSDK 21)の前に、ので、App Compatのテーマを継承することができます。

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

このため:

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

私の経験では、問題は私が私の対話を見せたコンテキストでした。

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

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

4
Dante

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);
}
4
Elyas Nategh

迅速な解決策.

Styles.xmlでベーステーマの親を変更する

からの交換

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

<style name="AppTheme" parent="Theme.AppCompat">
4
Kaloglu

私の場合、私はApplicationContextでビューを膨らませていました。 ApplicationContextを使用すると、テーマ/スタイルは適用されません。そのため、私のスタイルにはTheme.Appcompatがありましたが、適用されず、この例外が発生しました。詳細: ApplicationContextでインフレータを使用した場合、テーマ/スタイルが適用されない

3
Murat

私にとって、Theme.AppCompatをアプリケーションの基本テーマとして使用した後でも、上記の答えはどれもうまくいきませんでした。 com.Android.support:design:24.1.0を使っていたので、バージョンを24.1.1に変更しました。 gradle syncの後、再び機能して例外は解消されました。私には問題がデザインサポートライブラリのいくつかの古いバージョンにあったと思われます。

他の答えが何人かの人々のために働かない場合のためにここにこれを置くことだけ。

3
Sharp Edge

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

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

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

3
Azhar osws

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

デザインライブラリはSupport v4とAppCompat Support Librariesに依存しているので、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'
3
kiran boghra

SectionsPagerAdapterおよびViewPager&Fragmentによる私の活動

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }
2
valera

これは本当に私が私自身の答えを投稿することを余儀なくさせました。私はTheme.AppCompat.Light.NoActionBarを使用していて、すべてのAlertDialogをサポートcompatのインポートに置き換えてもまだv21(Lollipop)以下の問題に直面していました。それで2日後に私はついに彼らのAndroidManifest.xmlのためにAppThemeを指定する他のライブラリについて考えを与えました、はい、それがありました - >「PayTM pgsdkライブラリ」。

  1. 私のアプリに使用している 'AppTheme'を 'XYZAppTheme'に名前変更します
  2. ツールを使用して:私のプロジェクト(アプリ)のAndroidManifestのメソッドを置き換えます。

    <uses-permission Android:name="Android.permission.INTERNET" />
    
    <application
        Android:name=".XYZ"
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher_v2"
        Android:label="@string/app_name"
        Android:largeHeap="true"
        Android:roundIcon="@mipmap/ic_launcher_v2_round"
        Android:supportsRtl="true"
        Android:theme="@style/XYZAppTheme"
        tools:replace="Android:icon,Android:theme">
    
        <activity
            Android:name=".xyz.SplashActivity"
            Android:launchMode="singleTask"
            Android:screenOrientation="portrait">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
    
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

2
Amit Tumkur

私にとっては、私のcustomDialogクラスでAppCompatActivityからActivityへの継承を変更することで解決しました。 Theme.Dialogのマニフェストに変更は必要ありません。 

2
Kedar

レイアウトを拡張するときにパラメータとしてgetApplicationContext()を使用する場合は、代わりにgetBaseContext()を使用してみてください。例えば 

    View.inflate(getBaseContext(),
            getLayoutId() == 0 ? R.layout.page_default : getLayoutId(),
            null);
2
user1744585

画像のハイライト表示されたタブからテーマを変更します。  enter image description here

2
saleem kalro

Kotlinを使用している場合、Builderパラメーターを 'applicationContext'から 'this'に変更するまで、問題を解決できませんでした。

これは動作しません

val dialogDelete = AlertDialog.Builder(applicationContext)
            .setTitle("Confirmation")
            .setMessage("Delete this photo?")
            .setNegativeButton(Android.R.string.no){ it, which ->
                it.dismiss()
            }
dialogDelete.show()

次のコードワークス

val dialogDelete = AlertDialog.Builder(this)
            .setTitle("Confirmation")
            .setMessage("Delete this photo?")
            .setNegativeButton(Android.R.string.no){ it, which ->
                it.dismiss()
            }
dialogDelete.show()
2

Android Studioの場合: gradleファイルにサポートライブラリを追加して同期する build.gradle(Module:app)を編集して、次のように依存関係を設定します。

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.Android.support:design:23.1.1'
compile 'com.Android.support:support-v4:23.1.1'
}

私のサポートライブラリのバージョンは23.1.1です。必要に応じてサポートライブラリのバージョンを使用してください。

1
CodeBulls Inc.

私の場合は、 "FullScreenTheme"と呼ばれるスタイルを使用していましたが、正しく定義されているように見えましたが(Theme.AppCompatの子孫でした)、動作しませんでした。

私は、内部的に "FullScreenTheme"とそれはそうではありませんでした _ Theme.AppCompatのスタイルを定義したAARライブラリを使っていたことに気づきました。名前の衝突が問題の原因でした。

今Androidが正しいスタイルを使用しているので私自身のスタイル名を変更することによってそれを修正してください。

1
tomacco

注:私はこれを回答として意図していましたが、さらにテストを行った結果、コマンドラインからmavenを使用してビルドした場合はまだ失敗することがわかったので、問題になるよう編集しなければなりません! :-(

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

私は自分のAndroidビルドを邪魔する過程にありました。私はすでにapklibとjarのバージョンのapp compatに依存していました。

    <!-- 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を使用してコマンドラインからビルドおよびデプロイして実行すると、まだこの例外が発生します。

1

あなたのapp/build.gradleにこの依存関係を追加してください:

implementation "com.google.Android.material:material:1.1.0-alpha03"

styles.xml AppThemeの親を更新します。

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"/>
0
Mark Pazon