you with ventana theme style studio need holo emergente custom activity android android-activity dialog themes

with - ventana emergente android studio



Android: Cómo programar programáticamente el tema de una actividad para Theme.Dialog (9)

Como muchos otros, las llamadas a setTheme en onCreate (antes o después de mi llamada a super.onCreate) no funcionaron. Sin embargo, al anular SetTheme, pude especificar un tema distinto al indicado en Manifest.xml. Específicamente, lo siguiente funcionó sin problemas:

@Override public void setTheme(int resid) { boolean changeTheme = true; super.setTheme(changeTheme ? android.R.style.Theme_Dialog : resid); }

Encontré lo anterior en la discusión en: https://code.google.com/p/android/issues/detail?id=4394

Así que tengo una Activity (por ejemplo, TestActivity ) que debe actuar como una actividad normal no temática, así como también un Theme.Dialog en otro lugar. Estoy intentando reutilizar la misma TestActivity para ambas tareas.

Todo lo que busco es establecer el tema dinámicamente. El código es simple: aquí está onCreate mi actividad que funciona con un fondo negro

public void onCreate(Bundle icicle) { if (Utility.isDialog == true) setTheme(android.R.style.Theme_Dialog); super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); .....

y aquí está la entrada del manifiesto

<activity android:name=".TestActivity"/>

Y mientras tanto encontré una publicación que dice que no se puede hacer aquí es la publicación http://code.google.com/p/android/issues/detail?id=4394 Pero hay una fuerte sensación de que puede hacerse.

Todas las sugerencias son bienvenidas


Esto puede no ser aplicable en su situación, pero puede usar el tema:

Theme.Holo.DialogWhenLarge

y mostrará su actividad como un diálogo cuando la pantalla es grande, y como una actividad regular cuando la pantalla es pequeña. Esto está cubierto en la documentación de Android en Dialogs y también contiene información sobre la programación de un Diálogo que también puede utilizarse como un fragmento de pantalla completa.


Llamada a biblioteca de tema predeterminada:

super.setTheme(android.R.style.Theme);

En mi caso, yo estaba usando el tema de AppCompat, así que asegúrese de que en su identificación consulte la biblioteca adecuada (es decir):

super.setTheme(android.support.v7.appcompat.R.style.Theme_AppCompat_NoActionBar);



Me gustaría dar una vuelta de tuerca para este problema.

Problema: cómo usar la misma actividad tanto para el diálogo como para la pantalla completa.

Solución:

  1. Defina su actividad en su AndroidManifest.xml con el tema @android:style/Theme.Dialog
  2. En tu archivo .Java respectivo, busca un intent adicional que defina el modo de dialog .
  3. Si no existe, configure el Theme en android.R.style.Theme . Este es el theme predeterminado que se aplica si no define ningún tema.

Código:

boolean fDialogMode = getIntent().hasExtra("dialog_mode"); if( ! fDialogMode ) { super.setTheme(android.R.style.Theme); }

Solución alternativa:

Una solución más compleja es usar AlertDialog siguiente manera:

  1. Defina una clase ListAdapter extendida desde ArrayAdapter .
  2. return 1 en la función getCount

    @Override public int getCount() { return 1; }

  3. En la función getView , inflate el layout de la activity que necesita y realice cualquier personalización antes de devolver la view .

    @Override public View getView( int position, View view, ViewGroup group ) { View v = view; if( v == null ) { v = getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate( <layout res id>, null ); } ... Do any customization here .... return v; }

Esta es definitivamente una opción de segunda opción por si no está haciendo demasiado procesamiento en la class activity esto podría ser una opción.

La única razón para considerar esta solución podría ser que la lógica para mostrarla en un dialog esté aislada de los lugares donde se usa como un diálogo.

Ambas opciones funcionaron para mí, pero por razones obvias, estoy tomando la primera opción. :-)


Sé que llego tarde, pero me gustaría publicar una solución aquí:

Compruebe el código fuente completo here . Este es el código que utilicé al cambiar el tema ...

SharedPreferences pref = PreferenceManager .getDefaultSharedPreferences(this); String themeName = pref.getString("prefSyncFrequency3", "Theme1"); if (themeName.equals("Africa")) { setTheme(R.style.AppTheme); } else if (themeName.equals("Colorful Beach")) { //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show(); setTheme(R.style.beach); } else if (themeName.equals("Abstract")) { //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show(); setTheme(R.style.abstract2); } else if (themeName.equals("Default")) { setTheme(R.style.defaulttheme); }


puede usar setTheme(..) antes de llamar a setContentView(...) y super.oncreate() y debería funcionar bien


setTheme (android.R.style.Theme_Dialog);


use setTheme antes de llamar a super.onCreate(savedInstance)