Necesitas usar un tema Theme.AppCompat (o descendiente) con esta actividad
Estudio Android 0.4.5
Documentación de Android para crear cuadros de diálogo personalizados: http://developer.android.com/guide/topics/ui/dialogs.html
Si desea un cuadro de diálogo personalizado, puede mostrar una actividad como un cuadro de diálogo en lugar de utilizar las API de cuadro de diálogo. Simplemente cree una actividad y establezca su tema en Theme.Holo.Dialog en el <activity>
elemento manifiesto:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Sin embargo, cuando intenté esto me sale la siguiente excepción:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Estoy apoyando lo siguiente y no puedo usar algo mayor que 10 para el mínimo:
minSdkVersion 10
targetSdkVersion 19
En mis estilos tengo los siguientes:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Y en mi manifiesto tengo esto para la actividad:
<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>
Crear un cuadro de diálogo como este era algo que esperaba hacer, ya que ya completé el diseño.
¿Alguien puede decirme cómo puedo solucionar este problema?
La razón por la que tiene este problema es porque la actividad a la que intenta aplicar el tema del diálogo se está extendiendo, ActionBarActivity
lo que requiere AppCompat
que se aplique el tema.
Actualización : la extensión AppCompatActivity
también tendría este problema
En este caso, cambie la herencia de Java de ActionBarActivity
a Activity
y deje el tema del diálogo en el manifiesto tal como está, sin Theme.AppCompat
valor.
La regla general es que si desea que su código admita versiones anteriores de Android, debe tener el AppCompat
tema y el código Java debe extenderse AppCompatActivity
. Si tiene *una actividad que no necesita este soporte, por ejemplo, si solo le interesan las últimas versiones y funciones de Android, puede aplicarle cualquier tema, pero el código Java debe extenderse al antiguo Activity
.
NOTA: Al cambiar de AppCompatActivity
(o una subclase, ActionBarActivity
), a Activity
, también se deben cambiar las distintas llamadas con "soporte" a la llamada correspondiente sin "soporte". Entonces, en lugar de getSupportFragmentManager
llamar a getFragmentManager
.
Todo lo que necesita hacer es agregar android:theme="@style/Theme.AppCompat.Light"
la etiqueta de su aplicación en el AndroidManifest.xml
archivo.
Copiando la respuesta de @MarkKeen en los comentarios anteriores porque tuve el mismo problema.
El error se indica en la parte superior de la publicación y ocurrió después de agregar un cuadro de diálogo de alerta. Tengo toda la información de estilo relevante en el manifiesto. Mi problema se solucionó cambiando una referencia de contexto en el generador de alertas. Cambié:
new android.support.v7.app.AlertDialog.Builder(getApplicationContext())
a:
new android.support.v7.app.AlertDialog.Builder(this)
Y no más problemas.
Si está utilizando el contexto de la aplicación, así:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
cámbielo a un contexto de actividad como este:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);