android - studio - Debe utilizar un tema Theme.AppCompat(o descendiente) con esta actividad
table layout android (30)
Cambia tu estilo de tema padre a
parent="Theme.AppCompat"
Esto me funcionó ...
Android Studio 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 diálogo personalizado, puede mostrar una Actividad como un diálogo en lugar de usar las API de diálogo. Simplemente cree una actividad y establezca su tema en Theme.Holo.Dialog en el elemento de manifiesto <activity>
:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Sin embargo, cuando probé esto obtengo 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 a 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 el cuadro de diálogo de esta forma era algo que esperaba hacer, ya que ya había completado el diseño.
¿Alguien puede decirme cómo puedo solucionar este problema?
Cambiar el tema de la actividad deseada. Esto funciona para mí:
<activity
android:name="HomeActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.AppCompat.Light"
android:windowSoftInputMode="stateHidden" />
Copiando la respuesta de @MarkKeen en los comentarios anteriores ya que tuve el mismo problema.
Tuve el error indicado 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.
En el manifiesto de Android, simplemente cambie el tema de la actividad a AppTheme como sigue el fragmento de código
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme">
</activity>
En mi caso no tengo ningún archivo de valores-v21 en mi directorio res. Luego lo creé y agregué en él los siguientes códigos:
<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>
En mi caso, estaba inflando una vista con ApplicationContext. Cuando usa ApplicationContext, el tema / estilo no se aplica, por lo que, aunque había Theme.Appcompat en mi estilo, no se aplicó y causó esta excepción. Más detalles: el tema / estilo no se aplica cuando se usa inflater con ApplicationContext
En mi experiencia, el problema fue el contexto donde mostré mi diálogo. Dentro de un botón, ejemplifico un AlertDialog de esta manera:
builder = new AlertDialog.Builder(getApplicationContext());
Pero el contexto no era correcto y causó el error. Lo he cambiado usando el contexto de la aplicación de esta manera:
En la sección de declaración:
Context mContext;
en el método onCreate
mContext = this;
Y finalmente en el código donde necesito el 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();
}
}
}
Esta es la solución para mí.
Esta solución funcionó para mí.
La biblioteca de diseño depende de las bibliotecas de soporte de v4 y de AppCompat, por lo que no use una versión diferente para appcompat y la biblioteca de diseño en gradle.
utilizar
compile ''com.android.support:appcompat-v7:23.0.0''
compile ''com.android.support:design:23.0.0''
en lugar de
compile ''com.android.support:appcompat-v7:23.0.0''
compile ''com.android.support:design:23.1.0''
Estaba experimentando este problema a pesar de que mi Tema era un Tema de AppCompat
y mi Actividad era una Actividad de AppCompatActivity
(o Activity
, como se sugiere en las respuestas de otros). Así que limpié, reconstruí y ejecuté nuevamente el proyecto.
( Build -> Clean Project; Build -> Rebuild Project; Run -> Run )
Puede parecer tonto, pero ahora funciona muy bien !
Sólo espero que ayude!
Estaba recibiendo este mismo problema. Porque estaba creando un cajón de navegación personalizado. Pero me olvido de mencionar el tema en mi manifiesto como este.
android: theme = "@ style / Theme.AppCompat.NoActionBar"
Tan pronto agregué el tema anterior a mi manifiesto, resolvió el problema.
Este me funcionó:
<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>
Esto es cuando quieres un AlertDialog en un fragmento
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();
Esto es lo que lo solucionó para mí: en lugar de especificar el tema en el manifiesto, lo onCreate
en onCreate
para cada actividad que extiende ActionBarActivity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.MyAppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);
...
}
Aquí MyAppTheme
es un descendiente de Theme.AppCompat
, y se define en xml. Tenga en cuenta que el tema debe establecerse antes de super.onCreate
y setContentView
.
Esto funcionó para mí, acabo de cambiar:
final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
a esto:
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
Ha llegado a esto porque desea aplicar Material Design en su estilo de tema en versiones anteriores de sdk a 21. ActionBarActivity
requiere AppTheme
por lo que si también desea evitar su propia personalización sobre su AppTheme, solo tiene que cambiar sus estilos.xml (Anterior a SDK 21), de esta manera, puede heredar para un tema de App Compat.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
para esto:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
La razón por la que tiene este problema es porque la actividad a la que intenta aplicar el tema del diálogo es extender ActionBarActivity
que requiere que se AppCompat
tema AppCompat
.
Actualización : la extensión de 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á, un valor que no sea Theme.AppCompat
La regla general es que si desea que su código sea compatible con versiones anteriores de Android, debe tener el tema AppCompat
y el código Java debe extender AppCompatActivity
. Si tiene * una actividad que no necesita este soporte, como si solo le interesan las últimas versiones y características de Android, puede aplicarle cualquier tema, pero el código java debe extender la Activity
antigua.
NOTA: Cuando el cambio de AppCompatActivity
(o una subclase, ActionBarActivity
), a Activity
, también debe cambiar las distintas llamadas con "support" a la llamada correspondiente sin "support". Entonces, en lugar de getSupportFragmentManager
, llame a getFragmentManager
.
Mi actividad con SectionsPagerAdapter y ViewPager & Fragment
public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
@Override
public void onPostResume(){
super.onPostResume();
try {
getSupportActionBar().setDisplayShowTitleEnabled(false);
}catch (NullPointerException ignored){
}
}
Para mí fue la solución para usar ContextThemeWrapper:
private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}
Para mí, ninguna de las respuestas anteriores funcionó incluso después de tener Theme.AppCompat
como mi tema base para la aplicación. Estaba usando com.android.support:design:24.1.0
Así que acabo de cambiar la versión a 24.1.1
. Después de la sincronización de Gradle, volvió a funcionar y la excepción desapareció. Me parece que el problema era con algunas versiones anteriores de bibliotecas de soporte de diseño.
Solo pongo esto aquí en caso de que otras respuestas no funcionen para algunas personas.
Si necesita extender ActionBarActivity necesita en su style.xml:
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
Si establece como tema principal de su aplicación como android: Theme.Material.Light en lugar de AppTheme.Base , obtendrá el error "IllegalStateException: debe usar un tema Theme.AppCompat (o descendiente) con esta actividad".
Solo haz
new AlertDialog.Builder(this)
En lugar de
new AlertDialog.Builder(getApplicationContext())
Solución rápida.
Cambia tu tema principal base en styles.xml
Reemplazar desde
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
a
<style name="AppTheme" parent="Theme.AppCompat">
Su actividad es extender ActionBarActivity que requiere que se aplique el AppCompat.theme . El cambio de ActionBarActivity a Activity o FragmentActivity solucionará el problema.
Si no usa ninguna barra de acción, entonces:
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
También tuve este problema y lo que hice para solucionarlo Y, a pesar de eso, utilizar el tema de Holo fue seguir estos pasos:
Primero reemplacé esta importación:
import android.support.v7.app.AppCompatActivity;
Con este:
import android.app.Activity;
luego cambié mi extensión de:
public class MyClass extends AppCompatActivity {//...
a esto:
public class MyClass extends Activity {//...
Y también tuvo que cambiar esta importación:
import android.support.v7.app.AlertDialog;
a esta importación:
import android.app.AlertDialog;
y luego puede usar su etiqueta de tema en el manifiesto en el nivel de actividad:
android:theme="@android:style/Theme.Holo.Dialog" />
y por último, (a menos que tenga otras clases en su proyecto que tengan que usar v7 appCompat) puede limpiar y reconstruir su proyecto o eliminar esta entrada en el archivo de compilación de Gradle en el nivel de la aplicación:
compile ''com.android.support:appcompat-v7:23.2.1''
Si tiene otras clases en su proyecto que tienen que usar v7 appCompat, simplemente limpie y reconstruya el proyecto.
Tienes muchas soluciones a ese error.
Deberías usar Activity o FragmentActivity en lugar de ActionbarActivity o AppCompatActivity
Si desea usar ActionbarActivity o AppCompatActivity , debe cambiar en styles.xml Theme.Holo.xxxx por Theme.AppCompat.Light (si es necesario, agregar a DarkActionbar )
Si no necesita atributos avanzados sobre la barra de acción o AppCompat , no necesita usar Actionbar o AppCompat .
Todo lo que necesita hacer es agregar android:theme="@style/Theme.AppCompat.Light"
a su etiqueta de aplicación en el archivo AndroidManifest.xml
.
Tuve el mismo problema, pero se resolvió cuando puse esto en el manifiesto: 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>
Tuve una falla en los dispositivos Samsung a pesar de que la actividad usaba Theme.AppCompat . La causa raíz estaba relacionada con optimizaciones extrañas en el lado de 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
Mi solución fue simplemente eliminar android:launchMode="singleTask"
Ve a tus estilos y pon al padre.
parent="Theme.AppCompat"
en lugar de
parent="@android:style/Theme.Holo.Light"
min sdk es 10. ActionBar
está disponible desde el nivel 11 de api. Por lo tanto, para 10 estaría usando AppCompat
de la biblioteca de soporte para la que necesita usar Theme.AppCompat
o descendiente de la misma.
Utilizar
android:theme="@style/Theme.AppCompat" >
O si no quieres barra de acción en la parte superior
android:theme="@style/Theme.AppCompat.NoActionBar">
Más información @
http://developer.android.com/guide/topics/ui/actionbar.html
Editar:
Puede que haya leído mal el post.
Parece que quiere un diálogo con un tema de actividad. Entonces, como ya sugirió Bobbake4, extienda la Activity
lugar de ActionBarActivity
.
También vea los atributos de diálogo @ en el enlace de abajo