您需要使用Theme.AppCompat主题(或后代)与此活动
Android Studio 0.4.5
用于创build自定义对话框的Android文档: http : //developer.android.com/guide/topics/ui/dialogs.html
如果您想要自定义对话框,则可以将对话框显示为对话框,而不是使用对话框API。 只需创build一个活动并将其主题设置为<activity>
manifest元素中的Theme.Holo.Dialog:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
但是,当我尝试这个我得到以下exception:
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>
像这样创build对话框是我正在跳跃的事情,因为我已经完成了布局。
谁能告诉我如何解决这个问题?
您遇到此问题的原因是因为您尝试应用对话框主题的活动正在扩展需要应用AppCompat
主题的ActionBarActivity
。
更新 :扩展AppCompatActivity
也会有这个问题
在这种情况下,将Javainheritance从ActionBarActivity
更改为Activity
,并将对话框主题保留在清单中,这是一个非Theme.AppCompat
值
一般的规则是,如果你想要你的代码支持旧版本的Android,它应该有AppCompat
主题,而且Java代码应该扩展AppCompatActivity
。 如果你有一个不需要这种支持的活动,例如你只关心Android的最新版本和function,你可以应用任何主题,但是Java代码必须扩展普通的旧Activity
。
注:从AppCompatActivity
(或子类, ActionBarActivity
)更改为Activity
,还必须将“支持”的各种呼叫更改为相应的呼叫, 而不支持“支持”。 所以,而不是getSupportFragmentManager
,调用getFragmentManager
。
您只需要在AndroidManifest.xml
文件的应用程序标签中添加android:theme="@style/Theme.AppCompat.Light"
。
在上面的评论中复制@MarkKeen的答案,因为我有同样的问题。
我有错误在post的顶部,并发生在我添加了一个警告对话框。 我在清单中拥有所有相关的样式信息。 我的问题是通过更改警报生成器中的上下文引用来解决的 – 我改变了:
new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
至:
new android.support.v7.app.AlertDialog.Builder(this)
而没有更多的问题。
min sdk是10. ActionBar
可以从api level 11获得。因此,对于10,您将使用支持库中的AppCompat
,为此需要使用Theme.AppCompat
或后者。
使用
android:theme="@style/Theme.AppCompat" >
更多信息 @
http://developer.android.com/guide/topics/ui/actionbar.html
Eidt:
我可能误读了操作。
似乎op想要一个活动主题的对话框。 所以正如Bobbake4所build议的扩展Activity
而不是ActionBarActivity
。
在下面的链接中也可以看一下@ Dialog Attributes
这工作对我来说,我只是改变了:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
对此:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
这是为我解决了这个问题:我没有在清单中指定主题,而是在onCreate
为每个扩展ActionBarActivity
活动定义了它:
@Override protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.MyAppTheme); super.onCreate(savedInstanceState); setContentView(R.layout.my_activity_layout); ... }
这里MyAppTheme
是MyAppTheme
的后代,在xml中定义。 请注意,主题必须在super.onCreate
和setContentView
之前设置。
去你的风格,把父母
parent="Theme.AppCompat"
代替
parent="@android:style/Theme.Holo.Light"
即使我的主题是一个AppCompat
主题,而我的Activity是一个AppCompatActivity
(或Activity
,如其他答案中的build议),我遇到了这个问题。 于是我清理,重build和重新运行这个项目。
( Build – > Clean Project; Build – > Rebuild Project; Run – > Run )
它可能看起来愚蠢,但现在它工作很好 !
只是希望它有帮助!
如果你需要在你的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:Theme.Material.Light而不是AppTheme.Base,那么你会得到一个“IllegalStateException:你需要使用Theme.AppCompat主题(或后代)与此活动”错误。
即使该活动确实使用了Theme.AppCompat,我也曾在三星设备上发生这样的崩溃。 根本原因与三星方面奇怪的优化有关:
- 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
我的解决scheme是刚刚删除android:launchMode="singleTask"
我有同样的问题,但它解决了,当我把这个清单: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>
在我的情况下,我的res目录中没有值-V21文件。 然后我创build它并在其中添加以下代码:
<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" />
在Android清单中,将活动主题更改为AppTheme,如下面的代码片段所示
<activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme"> </activity>
你之所以这样做,是因为你想在以前的sdk版本中将你的主题风格的Material Design应用到AppTheme
需要AppTheme
所以如果你还想阻止你自己定制AppTheme,只有你必须在你的styles.xml (之前的sdk 21)这样,可以inheritance一个App Compat主题。
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
为了这:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
改变你的主题风格的父母
parent="Theme.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>
你有很多解决这个错误的方法。
-
您应该使用Activity或FragmentActivity而不是ActionbarActivity或AppCompatActivity
-
如果你想使用ActionbarActivity或AppCompatActivity ,你应该在styles.xml Theme.Holo.xxxx中更改为Theme.AppCompat.Light (如果需要,可以添加到DarkActionbar中 )
如果您不需要关于操作栏或AppCompat的高级属性,则不需要使用Actionbar或AppCompat 。
您的活动正在扩展ActionBarActivity ,这需要应用AppCompat.theme 。 从ActionBarActivity更改为Activity或FragmentActivity ,它将解决问题。
如果您不使用操作栏,则:
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
对我来说是使用ContextThemeWrapper的解决scheme:
private FloatingActionButton getFAB() { Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme); FloatingActionButton fab = new FloatingActionButton(context); return fab;}
从Android – 如何以编程方式创buildFAB?
这是当你想在一个片段的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();
我的活动与SectionsPagerAdapter和ViewPager&Fragment
public class MyActivity extends AppCompatActivity implements ActionBar.TabListener ... ... @Override public void onPostResume(){ super.onPostResume(); try { getSupportActionBar().setDisplayShowTitleEnabled(false); }catch (NullPointerException ignored){ } }
这个解决scheme为我工作。
devise库依赖于支持v4和AppCompat支持库,因此不要在gradle中使用不同版本的appcompat和devise库。
使用
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'
快速解决scheme
更改styles.xml中的基本主题父项
取代
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
至
<style name="AppTheme" parent="Theme.AppCompat">
注:我曾打算这样做的答案,但进一步的testing表明,它仍然失败时,从命令行使用maven构build,所以我不得不编辑它是一个问题! 🙁
在我的情况下,当我得到这个错误,我已经使用一个AppCompat主题,错误没有太大的意义。
我正在为我的android构build做准备。 我已经依赖于应用程序compat的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构build和部署并从命令行运行时,我仍然得到这个exception。
在Android Studio中:将支持库添加到gradle文件并进行同步。 编辑build.gradle(模块:应用程序)具有依赖关系,如下所示:
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; 根据情况使用支持库版本。
对于我来说,即使在将Theme.AppCompat
作为应用程序的基本主题之后,上述答案都Theme.AppCompat
。 我正在使用com.android.support:design:24.1.0
所以我只是将版本更改为24.1.1
。 在gradle同步之后,它再次工作,exception消失了。 在我看来,这个问题是由于gradle构build的。
只是把这个在这里,以防其他答案不适用于某些人。
对于我来说,问题通过在我的customDialog类中将AppCompatActivity的inheritance更改为Activity来解决。 Theme.Dialog清单中不需要更改。
我也有这个问题,我做了什么来解决它,仍然使用全息主题是采取这些步骤:
首先我replace了这个导入:
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),你可以清理并重build你的项目,或者在应用程序级别的gradle构build文件中删除这个条目:
compile 'com.android.support:appcompat-v7:23.2.1'
如果您的项目中有其他类必须使用v7 appCompat,那么只需清理并重build项目。
对我来说,Android SDK似乎无法find样式定义。 一切都是正确的连线,并做一个简单的项目干净固定它给我。