J'ai donc un Activity
(disons TestActivity
) qui doit agir comme un Activity
non traité normal ainsi qu'un Theme.Dialog
à un autre endroit. J'essaie de réutiliser le même TestActivity
pour les deux tâches.
Tout ce que je recherche pour définir le thème de manière dynamique . Le code est simple: Voici la onCreate
de mon activité qui fonctionne avec un arrière-plan noir
public void onCreate(Bundle icicle) {
if (Utility.isDialog == true)
setTheme(Android.R.style.Theme_Dialog);
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_NO_TITLE);
.....
et voici l'entrée du manifeste
<activity Android:name=".TestActivity"/>
Et entre-temps, j'ai trouvé un article qui dit que cela ne peut pas être fait, c'est l'article http://code.google.com/p/Android/issues/detail?id=4394 .Mais il fort sentiment que cela peut être fait.
Toutes les suggestions sont les bienvenues.
Voudrais donner un moyen de contourner ce problème.
Problème: comment utiliser la même activité en tant que boîte de dialogue et en plein écran.
Solution :
@Android:style/Theme.Dialog
.Java
respectif, recherchez une intent
extra qui définit le mode dialog
. Theme
sur Android.R.style.Theme
. Il s'agit de la variable theme
par défaut qui est appliquée si vous ne définissez aucun thème.Code:
boolean fDialogMode = getIntent().hasExtra("dialog_mode");
if( ! fDialogMode ) {
super.setTheme(Android.R.style.Theme);
}
Solution alternative:
Une solution plus complexe consiste à utiliser AlertDialog
comme ci-dessous:
ListAdapter
étendue à partir de ArrayAdapter
. renvoyer 1
dans la fonction getCount
@Override
public int getCount() { return 1; }
Dans la fonction getView
, inflate
la layout
de la activity
dont vous avez besoin et effectuez toute personnalisation avant de retourner 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;
}
Ceci est certainement une option de second choix si vous ne faites pas trop de traitements dans la variable activity
class
, cela pourrait être une option.
La seule raison de considérer cette solution pourrait être que la logique pour l'afficher dans une dialog
est isolée aux endroits où elle est utilisée comme dialogue.
Les deux options ont fonctionné pour moi, mais pour des raisons évidentes, je prends la première option. :-)
vous pouvez utiliser setTheme(..)
avant d'appeler setContentView(...)
et super.oncreate()
et cela devrait fonctionner correctement
Comme plusieurs autres, les appels à setTheme dans onCreate (avant ou après mon appel à super.onCreate) ne fonctionnaient pas. Cependant, en redéfinissant setTheme, j'ai pu spécifier un thème autre que celui indiqué dans Manifest.xml. Plus précisément, les éléments suivants ont fonctionné sans problème:
@Override
public void setTheme(int resid) {
boolean changeTheme = true;
super.setTheme(changeTheme ? Android.R.style.Theme_Dialog : resid);
}
J'ai trouvé ce qui précède dans la discussion à l'adresse: https://code.google.com/p/Android/issues/detail?id=4394
Appelez Activity.setTheme()
in onCreate()
avant d'appeler setContentView()
.
utilisez setTheme
avant d'appeler super.onCreate(savedInstance)
Cela peut ne pas être applicable dans votre situation, mais vous pouvez utiliser le thème:
Theme.Holo.DialogWhenLarge
et il affichera votre activité sous forme de boîte de dialogue lorsque l'écran est grand et d'activité régulière lorsque l'écran est petit ..__ Ceci est couvert dans la documentation Android sur Dialogs et contient également des informations sur la programmation d'un dialogue qui peut aussi Sun en tant que fragment plein écran.