您需要在此活动中使用 Theme.AppCompat 主题(或后代)

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>

像这样创建对话框是我希望做的事情,因为我已经完成了布局。

谁能告诉我如何解决这个问题?

答案

您遇到此问题的原因是,您尝试将对话框主题应用到的活动正在扩展ActionBarActivity ,而这需要应用AppCompat主题。

更新 :扩展AppCompatActivity也会AppCompatActivity此问题

在这种情况下,请将 Java 继承从ActionBarActivity更改为Activity ,并将对话框主题原样保留在清单中,这是一个非Theme.AppCompat


一般规则是,如果您希望代码支持旧版本的 Android,则它应具有AppCompat主题,而 Java 代码应扩展AppCompatActivity 。如果您有不需要此支持的活动(例如,您只关心 Android 的最新版本和功能),则可以对其应用任何主题,但是 Java 代码必须扩展普通的旧Activity


注意:从AppCompatActivity (或子类ActionBarActivity )更改为Activity ,还必须将带有 “support” 的各种调用更改为没有 “support” 的相应调用。因此,代替getSupportFragmentManager ,请调用getFragmentManager

您需要做的就是将android:theme="@style/Theme.AppCompat.Light"添加到AndroidManifest.xml文件中的应用程序标签中。

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
new android.support.v7.app.AlertDialog.Builder(this)
android:theme="@style/Theme.AppCompat" >
android:theme="@style/Theme.AppCompat.NoActionBar">
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

即使我的主题是一个AppCompat主题,而我的活动是一个AppCompatActivity (或Activity ,如其他答案所示),我也遇到了这个问题。因此,我清理,重建并重新运行了该项目。

构建 -> 清洁项目;构建 -> 重建项目;运行 -> 运行

看起来似乎很蠢,但现在效果很好

希望对您有所帮助!

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}
parent="Theme.AppCompat"
parent="@android:style/Theme.Holo.Light"
<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" />