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 cuadro de diálogo personalizado, puede mostrar una actividad como un cuadro de diálogo en lugar de utilizar las API de diálogo. Simplemente cree una actividad y establezca su tema en Theme.Holo.Dialog en el <activity>
elemento de manifiesto:
<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 que 10 para el mínimo:
minSdkVersion 10
targetSdkVersion 19
En mis estilos tengo lo siguiente:
<!-- 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>
La creación del 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 está tratando de aplicar el tema del diálogo se está extendiendo, lo ActionBarActivity
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 como está, un Theme.AppCompat
valor sin valor
La regla general es que si desea que su código sea compatible con 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, como que solo le interesan las últimas versiones y características de Android, puede aplicarle cualquier tema, pero el código Java debe extenderse a la versión anterior Activity
.
NOTA: Cuando se cambia 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
, llame getFragmentManager
.
Todo lo que necesita hacer es agregar android:theme="@style/Theme.AppCompat.Light"
a su etiqueta de aplicación en el AndroidManifest.xml
archivo.
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 sucedió 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);
min sdk es 10. ActionBar
está disponible desde el nivel 11 de la api. Por lo tanto, para 10, usaría AppCompat
la biblioteca de soporte para la que necesita usar Theme.AppCompat
o un descendiente de la misma.
Utilizar
android:theme="@style/Theme.AppCompat" >
O si no quieres la barra de acciones en la parte superior
android:theme="@style/Theme.AppCompat.NoActionBar">
Más información @
http://developer.android.com/guide/topics/ui/actionbar.html
Editar:
Podría haber leído mal la publicación de operaciones.
Parece que op quiere un diálogo con un tema de actividad. Entonces, como ya sugirió Bobbake4, extender en Activity
lugar de ActionBarActivity
.
También eche un vistazo a los atributos de diálogo @ en el enlace de abajo
Estaba experimentando este problema a pesar de que mi tema era un AppCompat
tema y mi actividad era un AppCompatActivity
(o Activity
, como se sugiere en las respuestas de otros). Así que limpié, reconstruí y volví a ejecutar el proyecto.
( Construir -> Proyecto limpio; Construir -> Reconstruir proyecto; Ejecutar -> Ejecutar )
Puede parecer tonto, ¡pero ahora funciona muy bien !
¡Solo espero que te ayude!
Esto es lo que me solucionó: en lugar de especificar el tema en el manifiesto, lo definí onCreate
para cada actividad que se extiende ActionBarActivity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.MyAppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);
...
}
Este MyAppTheme
es un descendiente de Theme.AppCompat
y está definido en xml. Tenga en cuenta que el tema debe establecerse antes super.onCreate
y setContentView
.
ve a tus estilos y pon el padre
parent="Theme.AppCompat"
en vez de
parent="@android:style/Theme.Holo.Light"
Cambie el tema de la actividad deseada. Esto funciona para mi:
<activity
android:name="HomeActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.AppCompat.Light"
android:windowSoftInputMode="stateHidden" />
En mi caso, no tengo ningún archivo de valores-v21 en mi directorio res. Luego lo creé y agregué 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>
Tuve tal bloqueo 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"
Solo haz
new AlertDialog.Builder(this)
En vez de
new AlertDialog.Builder(getApplicationContext())
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á un error "IllegalStateException: necesita usar un tema Theme.AppCompat (o descendiente) con esta actividad".
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>
En mi caso, este problema apareció cuando intenté mostrar el diálogo. El problema estaba en el contexto, utilicé getBaseContext () que teóricamente debería devolver el contexto de la actividad, pero parece que no lo es, o devuelve el contexto antes de que se aplicara cualquier tema.
Así que reemplacé getBaseContexts () con " this ", y ahora funciona como se esperaba.
Dialog.showAlert(this, title, message,....);
Tuve una actividad con el tema <android:theme="@android:style/Theme.Dialog">
utilizado para mostrar el diálogo en mi appWidget y tuve el mismo problema
Resolví este error cambiando el código de actividad como se muestra a continuación:
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
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;}
Asegúrese de estar utilizando un contexto de actividad mientras crea un nuevo Diálogo de alerta y no una aplicación o contexto base.
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 en su styles.xml (anterior a sdk 21) para que de esta manera se pueda heredar para un tema de compatibilidad de aplicaciones.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
para esto:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
También tuve este problema y lo que hice para solucionarlo, Y todavía uso el tema 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 tuve que cambiar esta importación:
import android.support.v7.app.AlertDialog;
a esta importación:
import android.app.AlertDialog;
y luego puedes usar tu etiqueta de tema en el manifiesto a 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 a 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.
Cambie el estilo de su tema principal a
parent="Theme.AppCompat"
Esto funcionó para mí ...
Tienes muchas soluciones a ese error.
Debe usar Activity o FragmentActivity en lugar de ActionbarActivity o AppCompatActivity
Si desea usar ActionbarActivity o AppCompatActivity , debe cambiar en styles.xml Theme.Holo.xxxx a Theme.AppCompat.Light (si es necesario, agregue a DarkActionbar )
Si no necesita atributos avanzados sobre la barra de acción o AppCompat , no necesita usar la barra de acción o AppCompat .
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>
Aquí es cuando desea 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();
En mis experiencias, el problema era el contexto en el que mostraba mi diálogo. Dentro de un botón, hago clic en instanciar un AlertDialog de esta manera:
builder = new AlertDialog.Builder(getApplicationContext());
Pero el contexto no era correcto y provocó el error. Lo cambié usando el contexto de la aplicación de esta manera:
En declarar secció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 mi.
Estaba teniendo el 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 como agregué el tema anterior a mi manifiesto, resolvió el problema.
Este funcionó para mí:
<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>
Su actividad está extendiendo ActionBarActivity, lo que requiere que se aplique AppCompat.theme . Cambie de ActionBarActivity a Activity o FragmentActivity , resolverá el problema.
Si no usa la barra de acción, entonces:
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
Solución rápida.
Cambie el padre de su tema base en styles.xml
Reemplazar de
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
a
<style name="AppTheme" parent="Theme.AppCompat">
Esta solución funcionó para mí.
La biblioteca de diseño depende de Support v4 y AppCompat Support Libraries, por lo que no use una versión diferente para appcompat y 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 vez de
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.android.support:design:23.1.0'
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Anteriormente, Kotaku informó que un hotel Godzilla se estaba abriendo en Tokio este abril. Junto al hotel, estaba programada la aparición de una enorme cabeza de 'Zilla, pero todo lo que hemos visto fueron imágenes conceptuales computarizadas.
Foto: Getty Desde que lanzó The Boring Company hace un año, Elon Musk ha mencionado varios sitios de construcción posibles para el negocio de perforación de túneles y ha descartado una vaga referencia a una aprobación gubernamental "verbal" para un túnel Hyperloop que conecta la ciudad de Nueva York y Washington. , CC. Pero ahora sabemos que al menos un alcalde quiere que Musk perfore un agujero debajo de su ciudad.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.