Comment changer le thème pour AlertDialog
Je me demandais si quelqu'un pouvait m'aider. Je suis en train de créer un AlertDialog. Pour ce faire, j'ai ajouté la ligne suivante de code dans styles.xml
<resources>
<style name="CustomAlertDialog" parent="android:Theme.Dialog.Alert">
<item name="android:windowBackground">@drawable/color_panel_background</item>
</style>
</resources>
- color_panel_background.9.png est situé dans le dossier drawable. Ce service est également disponible dans le SDK Android dossier res.
Ce qui suit est la principale activité.
package com.customdialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
public class CustomDialog extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setTheme(R.style.CustomAlertDialog);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("HELLO!");
builder .setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//MyActivity.this.finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//dialog.cancel();
}
});
AlertDialog alertdialog = builder.create();
alertdialog.show();
}
}
Pour appliquer le thème à un AlertDialog, j'ai dû mettre le thème dans le contexte actuel.
Cependant, j'ai juste ne peut pas sembler obtenir l'application pour montrer personnalisé AlertDialog. Quelqu'un peut-il m'aider à sortir avec cette?
- Est-il de l'aide? androblip.huiges.nl/2010/05/09/theme-android-dialog
- J'ai trouvé ce repo github pour être très utile: github.com/StylingAndroid/AlertDialog
Vous devez vous connecter pour publier un commentaire.
Dans Dialog.java (Android src) un ContextThemeWrapper est utilisé. De sorte que vous pouvez copier l'idée et de faire quelque chose comme:
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));
Et puis le style comme vous le souhaitez:
@android:style/Theme.Dialog
public ? Peut-il être utilisé à la place?Theme.AppCompat.Light.Dialog.Alert
style que le parent de votre style personnalisé. Mais, si vous faites cela, assurez-vous que vous importezimport android.support.v7.app.AlertDialog;
et pasimport android.app.AlertDialog
J'ai eu cette
AlertDialog
thème lié à la question de l'aide du sdk 1.6 comme décrit ici: http://markmail.org/message/mj5ut56irkrkc4nrJ'ai résolu le problème en procédant comme suit:
Espère que cette aide.
J'ai écrit une l'article dans mon blog sur comment configurer la mise en page d'une AlertDialog avec XML des fichiers de style. Le principal problème est que vous avez besoin de différents styles pour différents paramètres de mise en page. Ici, c'est un standard basé sur l'AlertDialog style de Holo Lumière Plate-forme de la version 19 pour un fichier de style qui devrait couvrir un tas de la mise en page standard, des aspects tels que la taille du texte et les couleurs de fond.
J'ai eu du mal avec cela - vous pouvez définir le style de l'arrière-plan de la boîte de dialogue à l'aide de
android:alertDialogStyle="@style/AlertDialog"
dans votre thème, mais il ignore les paramètres de texte que vous avez. Comme @rflexor dit ci-dessus, il ne peut être fait avec le kit de développement SDK avant en Nid d'abeille (bien que vous pourriez utiliserReflection
).Ma solution, en un mot, était de style de l'arrière-plan de la boîte de dialogue à l'aide de la ci-dessus, puis personnaliser le titre et le contenu de la vue (à l'aide de mises en page qui sont les mêmes que ceux dans le SDK).
Mon wrapper:
alert_dialog_title.xml (prises à partir du SDK)
alert_dialog_message.xml
Alors utilisez simplement
CustomAlertDialogBuilder
au lieu deAlertDialog.Builder
pour créer vos boîtes de dialogue, et il suffit d'appelersetTitle
etsetMessage
comme d'habitude.Vous pouvez affecter directement un thème lorsque vous lancez le Constructeur:
Alors la possibilité de personnaliser votre thème de votre
values/styles.xml
Theme.AppCompat.Light.Dialog.Alert
Je suppose qu'il ne peut pas être fait. Du moins pas avec le Constructeur. Je travaille avec la 1.6 et la mise en Œuvre dans le Générateur de rapports.create() est:
qui appelle la "non-theme-conscient" constructeur de AlertDialog, qui ressemble à ceci:
Il y a une deuxième constructeur en AlertDialog pour changer les thèmes:
que le Constructeur ne fait pas appel.
Si le Dialogue est assez générique de toute façon, je pourrais essayer d'écrire une sous-classe de AlertDialog, l'appel de la deuxième constructeur et l'utilisation de cette classe à la place du Constructeur-mécanisme.
De Dialogue Personnalisée:
appelez simplement
super(context,R.style.<dialog style>)
au lieu desuper(context)
dans la boîte de dialogue constructeurPour AlertDialog:
Il suffit de créer alertDialog avec ce constructeur:
Meilleur moyen pour cela, utilisez la boîte de dialogue personnaliser et de personnaliser selon vos besoins ici est de coutume de dialogue exemple.....
}
Ici est le xml, mise en page
Quiconque essaie de le faire dans un Fragment (à l'aide de la bibliothèque de prise en charge c'est à dire pré API 11) doit aller avec ceci:
@Rflexor m'a donné le petit coup de coude à étendre AlertDialog et d'exposer le constructeur grâce
AlertDialog.Builder(Context, int)
ne fonctionne que sur les API 11 et ci-dessus. Votre code va se planter sur les anciennes versions d'Android.De l'Arve Waltin la solution semble bon, même si je n'ai pas encore testé. Il y a une autre solution dans le cas où vous avez des difficultés à obtenir que cela fonctionne.... Étendre
AlertDialog.Builder
et remplacer toutes les méthodes (par exemple.setText
,setTitle
,setView
, etc) pour ne pas définir le Dialogue du texte/titre/vue, mais pour créer une nouvelle vue dans la boîte de Dialogue Afficher tout faire là-dedans. Ensuite, vous êtes libre de le style tout ce qu'il vous plaît.De clarifier, autant que la classe parent est concerné, la Vue est réglé, et rien d'autre.
Aussi loin que l'étendue personnalisée classe est concernée, tout est fait à l'intérieur de ce point de vue.
L'on peut le faire simplement en utilisant le Générateur de setView(). Vous pouvez créer n'importe quel mode d'affichage de votre choix et d'alimenter le générateur de rapports. Cela fonctionne bien. Je utiliser un TextView qui est rendu par la boîte de dialogue générateur de rapports. Je n'ai pas mis le message et cet espace est utilisé pour le rendu de mon custome textview.