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>
このようにダイアログボックスを作成することは、レイアウトを完成させたので、私が望んでいたことでした。
この問題を回避する方法を誰かに教えてもらえますか。
この問題を抱えているのは、ダイアログテーマを適用しようとしているアクティビティがActionBarActivity
を拡張するためであり、AppCompat
テーマを適用する必要があるためです。
更新 :AppCompatActivity
を拡張してもこの問題は発生します
この場合は、Javaの継承をActionBarActivity
からActivity
に変更し、ダイアログテーマをマニフェストの中のTheme.AppCompat
以外の値のままにします。
一般的な規則として、コードにAndroidの古いバージョンをサポートさせる場合は、AppCompat
テーマを使用し、JavaコードはAppCompatActivity
を拡張する必要があります。あなたがこのサポートを必要としない活動、例えばあなたがAndroidの最新バージョンと機能だけを気にするような活動をしているなら、あなたはそれにどんなテーマでも適用できますがJavaコードは普通のActivity
を拡張しなければなりません。
注:AppCompatActivity
(またはサブクラスActionBarActivity
)からActivity
への変更時には、 "support"を含むさまざまな呼び出しを対応する呼び出し without "support"に変更する必要があります。そのため、getSupportFragmentManager
の代わりにgetFragmentManager
を呼び出します。
Android:theme="@style/Theme.AppCompat.Light"
ファイルのapplicationタグにAndroidManifest.xml
を追加するだけです。
私は同じ問題を抱えていたので、上記のコメントで@ MarkKeenからの回答をコピーします。
私はエラーを投稿の上部に述べさせていただき、警告ダイアログを追加した後に起こりました。関連するスタイル情報はすべてマニフェストにあります。私の問題はalert builderのコンテキスト参照を変更することで解決しました - 私は変更しました:
new Android.support.v7.app.AlertDialog.Builder(getApplicationContext())
に:
new Android.support.v7.app.AlertDialog.Builder(this)
そしてもう問題はありません。
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も見てください。
これは私のために働きました、私はちょうど変えました:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
これに:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
私のテーマがAppCompat
テーマであり、私の活動がAppCompatActivity
(または他の回答で示唆されているようにActivity
)であったとしても、私はこの問題を経験していました。それで、私はプロジェクトを掃除し、再構築し、そして再実行しました。
( ビルド - >クリーンプロジェクト;ビルド - >プロジェクトの再ビルド;実行 - >実行 )
それは愚かに思えるかもしれませんが、今では 素晴らしい働きをします !
それが役立つことを願っています!
これは私にとってそれを修正したものです:マニフェストでテーマを指定する代わりに、私は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.onCreate
とsetContentView
の前に設定する必要があります。
あなたのスタイルに行き、親を置く
parent="Theme.AppCompat"
の代わりに
parent="@Android:style/Theme.Holo.Light"
私の場合、私は私の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>
目的のアクティビティのテーマを変更します。これは私のために働く:
<activity
Android:name="HomeActivity"
Android:screenOrientation="landscape"
Android:theme="@style/Theme.AppCompat.Light"
Android:windowSoftInputMode="stateHidden" />
あなたがあなたの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となります。アクティビティ」エラー。
アクティビティが 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"
を削除することでした
私は同じ問題を抱えていたが、私はマニフェストにこれを置くとき、それは解決した:アンドロイド: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>
やるだけ
new AlertDialog.Builder(this)
の代わりに
new AlertDialog.Builder(getApplicationContext())
私の場合、Dialogを表示しようとすると、このような問題が発生しました。問題はコンテキストにあり、理論的にはアクティビティコンテキストを返すはずですが、表示されないか、テーマが適用される前にコンテキストを返すgetBaseContext()を使用しました。
ですから、私はgetBaseContexts()を "this"に置き換えただけで、今では期待通りに動作します。
Dialog.showAlert(this, title, message,....);
私にとっては、ContextThemeWrapperを使用する解決策でした。
private FloatingActionButton getFAB() {
Context context = new Android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}
テーマスタイルの親をに変更します。
parent="Theme.AppCompat"
これは私のために働きました...
Androidのマニフェストでは、アクティビティのテーマをAppThemeに変更します
<activity
Android:name=".MainActivity"
Android:label="@string/app_name"
Android:theme="@style/AppTheme">
</activity>
私もこの問題を抱えていて、私がそれを解決するためにしたこと、そしてそれでも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を使用する必要がある他のクラスがある場合は、プロジェクトをクリーンアップして再構築します。
これはあなたがフラグメントの中に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();
あなたはそのエラーに対して多くの解決策を持っています。
ActionbarActivity または AppCompatActivity の代わりに Activity または FragmentActivity を使用する必要があります。
ActionbarActivity または AppCompatActivity を使用する場合は、 styles.xml Theme.Holo.xxxx を Themeに変更する必要があります。 AppCompat.Light (必要に応じて DarkActionbarに追加 )
アクションバーや AppCompat に関する高度な属性が必要ない場合は、 Actionbar または AppCompat を使用する必要はありません。
これは私のために働いた:
<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>
ActionBarActivityをActionBarActivityからActivityまたはFragmentActivityに変更するには、ActionBarActivityを適用する必要があります。問題を解く。
アクションバーを使用していない場合:
Android:theme="@Android:style/Theme.Light.NoTitleBar.Fullscreen"
以前のsdkバージョンでテーマスタイルのMaterial Designを21に適用したいので、これに来ました。あなたのAppThemeについてのあなた自身のカスタマイズを防ぎたいのならActionBarActivity
はAppTheme
soを必要とします。この方法でSDK 21)の前に、ので、App Compatのテーマを継承することができます。
<style name="AppTheme" parent="Android:Theme.Holo.Light.DarkActionBar">
このため:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
私の経験では、問題は私が私の対話を見せたコンテキストでした。
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();
}
}
}
これは私にとっての解決策です。
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);
}
迅速な解決策.
Styles.xmlでベーステーマの親を変更する
からの交換
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
に
<style name="AppTheme" parent="Theme.AppCompat">
私の場合、私はApplicationContextでビューを膨らませていました。 ApplicationContextを使用すると、テーマ/スタイルは適用されません。そのため、私のスタイルにはTheme.Appcompatがありましたが、適用されず、この例外が発生しました。詳細: ApplicationContextでインフレータを使用した場合、テーマ/スタイルが適用されない
私にとって、Theme.AppCompat
をアプリケーションの基本テーマとして使用した後でも、上記の答えはどれもうまくいきませんでした。 com.Android.support:design:24.1.0
を使っていたので、バージョンを24.1.1
に変更しました。 gradle syncの後、再び機能して例外は解消されました。私には問題がデザインサポートライブラリのいくつかの古いバージョンにあったと思われます。
他の答えが何人かの人々のために働かない場合のためにここにこれを置くことだけ。
私はこれと同じ問題を抱えていました。私はカスタムナビゲーション引き出しを作成していたので。しかし、私はこのように私のマニフェストでテーマを言及するのを忘れます
Android:theme = "@ style/Theme.AppCompat.NoActionBar"
マニフェストに上記のテーマを追加するとすぐに問題は解決しました。
この解決策は私のために働いた。
デザインライブラリは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'
SectionsPagerAdapterおよびViewPager&Fragmentによる私の活動
public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
@Override
public void onPostResume(){
super.onPostResume();
try {
getSupportActionBar().setDisplayShowTitleEnabled(false);
}catch (NullPointerException ignored){
}
}
これは本当に私が私自身の答えを投稿することを余儀なくさせました。私はTheme.AppCompat.Light.NoActionBarを使用していて、すべてのAlertDialogをサポートcompatのインポートに置き換えてもまだv21(Lollipop)以下の問題に直面していました。それで2日後に私はついに彼らのAndroidManifest.xmlのためにAppThemeを指定する他のライブラリについて考えを与えました、はい、それがありました - >「PayTM pgsdkライブラリ」。
ツールを使用して:私のプロジェクト(アプリ)の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>
私にとっては、私のcustomDialogクラスでAppCompatActivityからActivityへの継承を変更することで解決しました。 Theme.Dialogのマニフェストに変更は必要ありません。
レイアウトを拡張するときにパラメータとしてgetApplicationContext()を使用する場合は、代わりにgetBaseContext()を使用してみてください。例えば
View.inflate(getBaseContext(),
getLayoutId() == 0 ? R.layout.page_default : getLayoutId(),
null);
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()
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です。必要に応じてサポートライブラリのバージョンを使用してください。
私の場合は、 "FullScreenTheme"と呼ばれるスタイルを使用していましたが、正しく定義されているように見えましたが(Theme.AppCompat
の子孫でした)、動作しませんでした。
私は、内部的に "FullScreenTheme"とそれはそうではありませんでした _ Theme.AppCompat
のスタイルを定義したAARライブラリを使っていたことに気づきました。名前の衝突が問題の原因でした。
今Androidが正しいスタイルを使用しているので私自身のスタイル名を変更することによってそれを修正してください。
注:私はこれを回答として意図していましたが、さらにテストを行った結果、コマンドラインから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を使用してコマンドラインからビルドおよびデプロイして実行すると、まだこの例外が発生します。
あなたのapp/build.gradle
にこの依存関係を追加してください:
implementation "com.google.Android.material:material:1.1.0-alpha03"
styles.xml
AppThemeの親を更新します。
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"/>