Je prévois de créer 3 boutons avec layout_weight = 1, je ne suis pas intéressé par la boîte de dialogue personnalisée. J'ai donc écrit ci-dessous le code. Cela ne fonctionne pas. Quel est le problème dans ce code?
AlertDialog dialog= new AlertDialog.Builder(this).create();
dialog.setIcon(R.drawable.alert_icon);
dialog.setTitle("title");
dialog.setMessage("Message");
dialog.setButton(AlertDialog.BUTTON_POSITIVE,"Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
Button yesButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
Log.w("Button",""+yesButton);//here getting null
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f);
yesButton.setLayoutParams(layoutParams);
dialog.show();
Cordialement, Android developer.
Jetez un œil ici pour la réponse: http://code.google.com/p/Android/issues/detail?id=636
Comme il est dit dans le commentaire # 4, vous devez appeler show()
dans votre boîte de dialogue avant de pouvoir accéder aux boutons, ils ne sont pas disponibles au préalable. Pour une solution automatique sur la façon de modifier les boutons dès qu'ils sont prêts, voir Réponse de Mickeys
Cela fonctionne pour moi:
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setMessage(message)
.setCancelable(true)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//do smthng
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//do snthn
}
}).create();
alertDialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) { //
Button positiveButton = ((AlertDialog) dialog)
.getButton(AlertDialog.BUTTON_POSITIVE);
positiveButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_default_holo_dark));
Button negativeButton = ((AlertDialog) dialog)
.getButton(AlertDialog.BUTTON_NEGATIVE);
positiveButton.setBackgroundDrawable(getResources()
.getDrawable(R.drawable.btn_default_holo_dark));
}
});
alertDialog.show();
uniquement dans cet ordre, appelez alertDialog.setOnShowListener
après create()
Merci bien. Mais pour les nouveaux développeurs qui comprennent le but, je réécris le code ci-dessous
AlertDialog dialog= new AlertDialog.Builder(this).create();
dialog.setIcon(R.drawable.alert_icon);
dialog.setTitle("title");
dialog.setMessage("Message");
dialog.setButton(AlertDialog.BUTTON_POSITIVE,"Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
dialog.show();
Button yesButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
Log.w("Button",""+yesButton); //here getting null
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f);
yesButton.setLayoutParams(layoutParams);