10
votes

Boîte de dialogue d'alerte personnalisée pour obtenir un rembourrage indésirable

J'ai essayé de créer une boîte de dialogue d'alerte personnalisée et cela fonctionne surtout très bien. La fonctionnalité fonctionne parfaitement, mais la vue se comporte de manière étrange. La mise en page de dialogue consiste en un bouton et une vue de liste. Comme vous le verrez dans la capture d'écran sous le bouton, vous obtenez une marge en haut et en bas.

Je ne vois aucune raison de ces marges et j'apprécierais énormément de l'aide :)

Pour une raison quelconque, je ne peux pas poster ma mise en page XML, mais je peux aussi vous assurer que cela ne contient pas de pagaïdes ni de marges de Toute sorte

code Java: xxx

capture d'écran:

 http://cl.ly/3s2y3p3e0e3h2o1i272m


0 commentaires

3 Réponses :


19
votes

Le personnage personnalisé d'un alertdialog code> a un rembourrage supérieur et inférieur de 5DP. Vous pouvez remplacer ces utilisateurs:

alert.setView(dialogView, 0, 0, 0, 0);


9 commentaires

OK, mais c'est la méthode de la classe AlertDialog et non alertedialog.builder, alors comment invoquer cette méthode?


Il fait partie de alertdialog.builder: développeur.android.com/reference/andrroid/app/... Vous remplaceriez votre 4ème ligne avec ce que les ordinateurs ont ci-dessus.


Comme indiqué dans le document lié, la méthode SetView () d'alertdialog.builder est SetView (vue) Bien que AlertDialog contient la méthode SetView (vue, int, int, int, int). Comment accéder à cette méthode d'alertdialog.builder?


stupide de moi, oublie cette dernière question. Merci beaucoup pour votre aide!


Cela ne semble pas fonctionner sur des appareils avec HTC Sense, le rembourrage est toujours là.


La seule façon dont je pouvais faire c'était appelait alertdialog.builder.create () pour obtenir l'instance AlertDialog.


@Jkm Êtes-vous sûr que cela fait partie d'alertdialog.builder? Le lien que vous avez fourni ne prend également pas en charge votre argument ..


J'ai posté la réponse il y a plus d'un an, il est probablement obsolète d'ici et doit être mis à jour. Malheureusement, je ne fais plus le développement d'Android activement.


Merci, mon vieille erreur est corrigée. Setview (voir, int, int, int, int) doit être appelé objet d'alerte, pas de constructeur.



10
votes

Pour moi, il semblait que Builder.seview (dialogview, 0, 0, 0, 0); est défini sur @hide et non disponible. En fin de compte, je devais régler le rembourrage du parent de mon point de vue personnalisé après avoir appelé show ()

par exemple: xxx


1 commentaires

Pour une raison quelconque, le rembourrage reste. Quelqu'un a une meilleure solution?



2
votes

Voici le code qui vous donnera un contrôle total sur la vue de dialogue:

final Dialog dlg = new Dialog(this);
View action_layout = ((LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE)).inflate(R.layout.contacts_action, null);
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);  
Window window = dlg.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.gravity = Gravity.FILL_HORIZONTAL;
window.setAttributes(wlp);
dlg.setCancelable(true);
dlg.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dlg.setContentView(action_layout);
dlg.show();


0 commentaires